gpt4 book ai didi

python - Pandas 按组删除前导零值

转载 作者:太空宇宙 更新时间:2023-11-04 09:28:41 25 4
gpt4 key购买 nike

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

输入

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 , 但丢弃数据直到索引和分组。

最佳答案

使用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

这是一个稍微更通用的版本,应该适用于删除具有任何前导值的行,

thresh = 0
df[df['value'].ne(thresh).groupby(df['group']).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

关于python - Pandas 按组删除前导零值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56567933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com