在Python中分组并添加新的计算列

在Python中分组并添加新的计算列,python,pandas,dataframe,group-by,Python,Pandas,Dataframe,Group By,我用Python编写了这个数据帧(假设它已排序): 我想添加一个名为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.

我用Python编写了这个数据帧(假设它已排序):

我想添加一个名为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)


通过使用
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

您可以对每组使用
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
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