这是我的第一篇文章,所以我试图以正确的格式来做。我有两列包含文本和值以及索引日期。
Date Zweck Betrag
2014-09-26 00:00:00 Gehalt 22.0
2014-09-26 01:00:00 REWE 1.0
2014-09-26 02:00:00 Edeka 76.0
2014-09-26 03:00:00 Bike 51.0
2014-09-26 04:00:00 ING 64.0
2014-09-26 05:00:00 Allianz 93.0
2014-09-26 06:00:00 Bahn 8.0
2014-09-26 07:00:00 Kaufhof 33.0
2014-09-26 08:00:00 CA 6.0
2014-09-26 09:00:00 Shell 55.0
Run Code Online (Sandbox Code Playgroud)
如果 Text 不是 Salary (所以是负值),我想做的是翻转每一行中的符号。我用这种方法尝试过,但我不起作用:
for r in np.arange(len(df)):
if df.ix[r].Zweck != 'Gehalt':
betrag = df.ix[r].Betrag
df.loc[r, 'Betrag'] = -1 * betrag
Run Code Online (Sandbox Code Playgroud)
选项 1
您不必使用循环进行迭代。Pandasloc为您矢量化了这个替代品。
df.loc[df.Zweck != 'Gehalt', 'Betrag'] *= -1
Run Code Online (Sandbox Code Playgroud)
df
Date Zweck Betrag
0 2014-09-26 00:00:00 Gehalt 22.0
1 2014-09-26 01:00:00 REWE -1.0
2 2014-09-26 02:00:00 Edeka -76.0
3 2014-09-26 03:00:00 Bike -51.0
4 2014-09-26 04:00:00 ING -64.0
5 2014-09-26 05:00:00 Allianz -93.0
6 2014-09-26 06:00:00 Bahn -8.0
7 2014-09-26 07:00:00 Kaufhof -33.0
8 2014-09-26 08:00:00 CA -6.0
9 2014-09-26 09:00:00 Shell -55.0
Run Code Online (Sandbox Code Playgroud)
分配到位,便宜且快速。
选项 2
或者,您可以使用np.where,它为您提供了一个可以重新分配的新系列。
df['Betrag'] = np.where(df.Zweck != 'Gehalt', df.Betrag * -1, df.Betrag)
Run Code Online (Sandbox Code Playgroud)
df
Date Zweck Betrag
0 2014-09-26 00:00:00 Gehalt 22.0
1 2014-09-26 01:00:00 REWE -1.0
2 2014-09-26 02:00:00 Edeka -76.0
3 2014-09-26 03:00:00 Bike -51.0
4 2014-09-26 04:00:00 ING -64.0
5 2014-09-26 05:00:00 Allianz -93.0
6 2014-09-26 06:00:00 Bahn -8.0
7 2014-09-26 07:00:00 Kaufhof -33.0
8 2014-09-26 08:00:00 CA -6.0
9 2014-09-26 09:00:00 Shell -55.0
Run Code Online (Sandbox Code Playgroud)
选项 3
另一个,带mask/ where-
df.Betrag = df.Betrag.where(df.Zweck != 'Gehalt', df.Betrag)
Run Code Online (Sandbox Code Playgroud)
或者,
df.Betrag = df.Betrag.mask(df.Zweck == 'Gehalt', df.Betrag)
Run Code Online (Sandbox Code Playgroud)
或者,您可以df.update改为使用,这样就无需重新分配。
df.update(df.Betrag.where(df.Zweck != 'Gehalt', df.Betrag))
Run Code Online (Sandbox Code Playgroud)
df
Date Zweck Betrag
0 2014-09-26 00:00:00 Gehalt 22.0
1 2014-09-26 01:00:00 REWE -1.0
2 2014-09-26 02:00:00 Edeka -76.0
3 2014-09-26 03:00:00 Bike -51.0
4 2014-09-26 04:00:00 ING -64.0
5 2014-09-26 05:00:00 Allianz -93.0
6 2014-09-26 06:00:00 Bahn -8.0
7 2014-09-26 07:00:00 Kaufhof -33.0
8 2014-09-26 08:00:00 CA -6.0
9 2014-09-26 09:00:00 Shell -55.0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1143 次 |
| 最近记录: |