我在Python中有这个DataFrame(假设它已排序):
Col1 Col2 Col3
a 1 2
a 2 3
a 4 6
b 3 7
b 5 1
我想添加一个名为Col4的新列,其中每个值是当前Col3和上一行Col3的加法。
它应该通过对Col1进行分组来运行此逻辑,如果它是组中的第一行,则仅使用当前值Col3。
所以它应该像这样:
Col1 Col2 Col3 Col4
a 1 2 2 (i.e. 2 - it is the first in first row group)
a 2 3 5 (i.e. 2+3)
a 4 6 9 (i.e. 3+6)
b 3 7 7 (i.e. 7 - it is the first row in second group)
b 5 1 8 (i.e. 7+1)
如何在Python中完成(希望使用groupBy)?
谢谢
答案 0 :(得分:2)
每个组可以使用shift
:
df['Col4'] = df['Col3'] + df.groupby('Col1')['Col3'].shift(1).fillna(0)
>>> df
Col1 Col2 Col3 Col4
0 a 1 2 2.0
1 a 2 3 5.0
2 a 4 6 9.0
3 b 3 7 7.0
4 b 5 1 8.0
答案 1 :(得分:1)
通过使用rolling
sum
df['col4']=df.groupby('Col1').Col3.rolling(2,min_periods=1).sum().values.astype(int)
df
Out[105]:
Col1 Col2 Col3 col4
0 a 1 2 2
1 a 2 3 5
2 a 4 6 9
3 b 3 7 7
4 b 5 1 8