首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Pandas按组删除前导零值

Pandas按组删除前导零值
EN

Stack Overflow用户
提问于 2019-06-13 01:58:04
回答 1查看 1.1K关注 0票数 1

我希望在" 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,但在索引和分组之前丢弃数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-13 02:01:41

使用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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56567933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档