我有以下df
,
year_month pct
201903 50
201903 40
201903 5
201903 5
201904 90
201904 5
201904 5
我想创建一个名为non-tail
的布尔列,它满足以下条件,
df.sort_values(['pct'], ascending=False).groupby('year_month')['pct'].apply(lambda x: x.cumsum().le(80))
在non-tail
中,将添加的pct
中任何下一个立即累积值大于80的下一个值也将被标记为True
,因此结果看起来像< / p>
year_month pct non-tail
201903 50 True
201903 40 True
201903 5 False
201903 5 False
201904 90 True
201904 5 False
201904 5 False
答案 0 :(得分:3)
我会做什么
df.pct.iloc[::-1].groupby(df['year_month']).cumsum()>20
Out[306]:
6 False
5 False
4 True
3 False
2 False
1 True
0 True
Name: pct, dtype: bool
答案 1 :(得分:2)
IIUC,您需要移动cumsum
:
df = df.sort_values(['year_month','pct'], ascending=[True,False])
(df.groupby('year_month')['pct']
.apply(lambda x: x.cumsum().le(80)
.shift(fill_value=True)
)
)
给您
0 True
1 True
2 False
3 False
4 True
5 False
6 False
Name: pct, dtype: bool