1 回答
TA贡献1848条经验 获得超6个赞
我认为这实际上取决于您要使用的功能。DataFrame.expanding例如,如果您想计算总和,我可以想到一个技巧。想法是我们可以利用扩展,然后只考虑选择了整个组的行Series.where
df.expanding().sum().where(df['B'].ne(df['B'].shift(-1)))
A
0 NaN
1 3.0
2 NaN
3 10.0
4 NaN
5 21.0
df.expanding().sum().where(df['B'].ne(df['B'].shift(-1))).loc[lambda x: x.A.notna()]
A
1 3.0
3 10.0
5 21.0
更新
我们也可以使用DataFrame.groupby+DataFrame.expanding
df.groupby('B').sum().expanding().sum()
要获得预期的输出:
new_df = (df.groupby('B').sum().expanding().sum()
.reset_index()
.assign(B = lambda x: x.B.add(' or ').cumsum()
.str.rstrip(' or '))
.set_index('B') )
print(new_df)
A
B
a 3.0
a or b 10.0
a or b or c 21.0
添加回答
举报
