以下面的df
为例:
df = pd.DataFrame({'col_1':['A', 'B', 'C', 'A', 'B', 'C', 'A', 'B', 'C'],
'val_1':[10, 20, 15, 25, 20, 15, 20, 30, 40],
'val_2':[-5, 0, 5, 10, 5, 10, 15, 10, 5]})
col_1 val_1 val_2
0 A 10 -5
1 B 20 0
2 C 15 5
3 A 25 10
4 B 20 5
5 C 15 10
6 A 20 15
7 B 30 10
8 C 40 5
我需要创建一个新的列,其倒号为val_2
,ifcol_1 == 'A'
和ifval_2 > 0
。这很简单:
df['new_col'] = df.apply(lambda x: -x.val_2 if x.col_1 == 'A' and x.val_2 > 0 else 0, axis=1)
col_1 val_1 val_2 new_col
0 A 10 -5 0
1 B 20 0 0
2 C 15 5 0
3 A 25 10 -10
4 B 20 5 0
5 C 15 10 0
6 A 20 15 -15
7 B 30 10 0
8 C 40 5 0
但我的最终目标只是得到new_col
中的增量值,即行(n)的值减去上述行的累积和
结果df
应该如下所示:
col_1 val_1 val_2 new_col
0 A 10 -5 0
1 B 20 0 0
2 C 15 5 0
3 A 25 10 -10
4 B 20 5 0
5 C 15 10 0
6 A 20 15 -5 --> -15 - (-10) --> (-10 is the cumsum of previous rows)
7 B 30 10 0
8 C 40 5 0
如果使用
NaN
而不是0
,事情会变得更容易您可以
dropna()
只保留值您可以将其传递到
.update()
然后将
0
与.fillna(0)
放在一起相关问题 更多 >
编程相关推荐