熊猫在列上使用cumsum并创建一个新的boolean列,以将边缘大小写标记为True

时间:2019-07-11 14:37:45

标签: python-3.x pandas dataframe pandas-groupby cumsum

我有以下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

2 个答案:

答案 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