首页 > 解决方案 > 熊猫:达到阈值后从累积列中删除行

问题描述

我正在使用以下数据框:

id1     Val cum_val
3233    24  24
3233    12  36
3233    7   43
3233    6   49
3233    6   55
3233    3   58
3255    5   5
3255    44  49
3255    4   53
3255    8   61
3255    8   69

其中 cum_val 列是每组 id1 3233 和 3255 中 Val 的累积。

我想得到以下信息:

id1     Val cum_val
3233    24  24
3233    12  36
3233    7   43
3233    6   49
3233    6   55
3255    5   5
3255    44  49
3255    4   53

即只保留行,直到cum_val达到大于 50 的第一个值。例如,对于 id1 = 3255,我已经丢弃cum_val了 61 和 69 的行,因为 53 是大于 50 的第一个值。

我不知道如何解决这个问题。

标签: pythonpandas

解决方案


用于DataFrameGroupBy.shift移动每组的值并测试不太喜欢50匹配后的下一组50

df = df[df.groupby('id1')['cum_val'].shift(fill_value=0).lt(50)]
print (df)
    id1  Val  cum_val
0  3233   24       24
1  3233   12       36
2  3233    7       43
3  3233    6       49
4  3233    6       55
6  3255    5        5
7  3255   44       49
8  3255    4       53

推荐阅读