每组第二个元素的大熊猫

时间:2018-07-28 22:37:45

标签: pandas numpy dataframe

我有一个如下所示的数据框。最右边的列是我想要的列:

Group   Value   Target_CumSum   
1        3         0     
1        2         2  
1        5         7
1        4         11
2        1         0
2        5         5
2        9         14
2        3         17

如何从每个组的第二个元素开始执行cumsum(),而不是第一个元素?

df = pd.DataFrame({'Group': [1,1,1,1,2,2,2,2], 'Value': [3,2,5,4,1,5,9,3], 'Target_CumSum': [0,2,7,11,0,5,14,17]})
#df['MyCumSum']= df.groupby(['Group'])['Value'].cumsum()

4 个答案:

答案 0 :(得分:3)

IIUC

g=df.groupby('Group').Value
g.cumsum()-g.transform('first')
Out[597]: 
0     0
1     2
2     7
3    11
4     0
5     5
6    14
7    17
Name: Value, dtype: int64

答案 1 :(得分:1)

我不认为有内置功能。因此您必须制作一个自定义函数并应用它。希望对您有帮助。

def custom_cumsum (X):

    X[1:] =  np.cumsum(X[1:])
    X.iloc[0] = 0

    return X

df['cumsum'] = df.groupby('Group')['Value'].apply(custom_cumsum)

答案 2 :(得分:1)

只想提供另一种解决方案:

df['Value'].where(df['Group'].duplicated(), 0).groupby(df.Group).cumsum()

输出:

0     0
1     2
2     7
3    11
4     0
5     5
6    14
7    17
Name: Value, dtype: int64

答案 3 :(得分:0)

(ngSubmit)="locations.form.valid && saveLocations(locations)"