大Pandas下降领先的零值(按组)

2024-04-26 11:54:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想删除“value”列中带有零的行,直到每个组的第一个非零值的索引。在

输入

df = pd.DataFrame({'date': ['2019-01-01', '2019-01-02', '2019-01-03','2019-01-04',
                           '2019-01-01', '2019-01-02', '2019-01-03','2019-01-04',
                            '2019-01-01', '2019-01-02', '2019-01-03','2019-01-04'],
                  'value' : [0, 50, 100, 120, 0, 10, 0, 20, 0, 0, 10, 0],
                  'group': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C']
                 })
df
    date         value     group
0   2019-01-01   0         A
1   2019-01-02   50        A
2   2019-01-03   100       A
3   2019-01-04   120       A
4   2019-01-01   0         B
5   2019-01-02   10        B
6   2019-01-03   0         B
7   2019-01-04   20        B
8   2019-01-01   0         C
9   2019-01-02   0         C
10  2019-01-03   10        C
11  2019-01-04   0         C

输出

    date         value     group
1   2019-01-02   50        A
2   2019-01-03   100       A
3   2019-01-04   120       A
5   2019-01-02   10        B
6   2019-01-03   0         B
7   2019-01-04   20        B
10  2019-01-03   10        C
11  2019-01-04   0         C

Find first non-zero value in each column of pandas DataFrame类似,但将数据删除到索引和分组。在


Tags: ofindataframepandasdfdatevaluegroup
1条回答
网友
1楼 · 发布于 2024-04-26 11:54:31

使用groupbycumsum,将结果与零比较:

df[df.groupby('group')['value'].cumsum().gt(0)]

          date  value group
1   2019-01-02     50     A
2   2019-01-03    100     A
3   2019-01-04    120     A
5   2019-01-02     10     B
6   2019-01-03      0     B
7   2019-01-04     20     B
10  2019-01-03     10     C
11  2019-01-04      0     C

这是一个稍微更通用的版本,可以用来删除任何前导值的行

^{pr2}$

相关问题 更多 >