Erstellen neuer Spalte mit positiven Werten in Pandas

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
E1986
User
Beiträge: 19
Registriert: Samstag 3. Mai 2014, 17:43

Hi. Ich habe einen Pandas DataFrame df, wie unten gezeigt.

Code: Alles auswählen

Date        Time            Value/MWh
01.08.2009  00:00 - 01:00   0
01.08.2009  01:00 - 02:00   -100
01.08.2009  02:00 - 03:00   80
01.08.2009  03:00 - 04:00   50
Falls in der Value/MWh-Spalte eine negative Zahl steht, möchte ich diese als positive Zahl in einer neuen Spalte haben. In der alten Spalte soll dann eine 0 stehen.
So sollte es dann aussehen:

Code: Alles auswählen

Date        Time            Value/MWh
01.08.2009  00:00 - 01:00   0   0
01.08.2009  01:00 - 02:00   0   100
01.08.2009  02:00 - 03:00   80  0
01.08.2009  03:00 - 04:00   50  0
Ich habe etwas rumprobiert, mit NumPy (bin da bewanderter), aber das funktioniert nicht. Weiß jemand gute Python/Pandas-Methoden, um dort hinzukommen, wo ich hinmöchte?
Zuletzt geändert von Anonymous am Donnerstag 30. Oktober 2014, 09:41, insgesamt 1-mal geändert.
Grund: Daten in Code-Tags gesetzt.
BlackJack

@E1986: Das Ergebnis sieht unvollständig aus, denn die letzte Spalte ist nicht weit genug eingerückt und hat keinen Namen.

Ansonsten würde ich die Werte wie in Numpy bestimmen — beispielsweise negieren und dann mit `clip()` die Untergrenze auf 0 beschränken:

Code: Alles auswählen

In [31]: df
Out[31]: 
          a         b         c         d         e
0 -1.013320 -0.425068  0.059308  1.101891 -0.565119
1 -0.153805 -0.856334  1.797218 -0.084897 -1.727285
2 -1.227438  0.469735 -1.300072 -0.304345 -0.983917
3  0.679577  1.344651  0.218574  1.426298  0.657777
4 -0.135616 -0.737365 -0.427515 -0.082377  0.423214
5 -0.403388 -2.031870 -0.166666 -0.077302 -0.321080
6  1.806803  1.591405 -0.005332 -1.618079 -0.272845
7  0.507349 -0.169954 -1.010509 -0.059223 -1.134910
8 -0.304001 -0.659369  1.162756  0.863579 -0.033940
9  1.677836 -0.456035 -1.661636 -0.538276 -0.278343

In [32]: df.a
Out[32]: 
0   -1.013320
1   -0.153805
2   -1.227438
3    0.679577
4   -0.135616
5   -0.403388
6    1.806803
7    0.507349
8   -0.304001
9    1.677836
Name: a, dtype: float64

In [33]: -df.a
Out[33]: 
0    1.013320
1    0.153805
2    1.227438
3   -0.679577
4    0.135616
5    0.403388
6   -1.806803
7   -0.507349
8    0.304001
9   -1.677836
Name: a, dtype: float64

In [34]: (-df.a).clip(0)
Out[34]: 
0    1.013320
1    0.153805
2    1.227438
3    0.000000
4    0.135616
5    0.403388
6    0.000000
7    0.000000
8    0.304001
9    0.000000
Name: a, dtype: float64
E1986
User
Beiträge: 19
Registriert: Samstag 3. Mai 2014, 17:43

Hi. Danke für deine Antwort. Ich werds mal probieren.
Im "Ergebnis" von mir hatte ich die Beschriftung der andere Spalte vergessen.
Antworten