我有一个如下所示的数据框。最右边的列是我想要的列:
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()
答案 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)"