Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫按组删除前导零值_Python_Pandas - Fatal编程技术网

Python 熊猫按组删除前导零值

Python 熊猫按组删除前导零值,python,pandas,Python,Pandas,我想在value列中删除带零的行,直到每个组的第一个非零值的索引 输入 输出 与类似,但在索引和分组之前会将数据上移。使用groupby和cumsum,将结果与零进行比较: 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

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

输入

输出

与类似,但在索引和分组之前会将数据上移。

使用groupby和cumsum,将结果与零进行比较:

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
使用groupby和cumsum,将结果与零进行比较:

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

好的方法,如果序列包含负值,可能不起作用。@QuangHoang是的,OP可能想澄清在这种情况下的预期行为,如果要删除它们,那么解决方法很简单。如果要保留它们,那么会有点困难,但可行。评论实际上是针对您的第一个解决方案。第二个解决方案会很好。@cs95谢谢您的解决方案!理想情况下,我希望删除具有任意阈值的前导行,例如,第一个值高于20,或者第一个值低于20-10@NickD我的第二个解决方案会奏效。请看一看我编辑的内容,以确保清晰。如果序列包含负值,好的方法可能不起作用。@QuangHoang对,OP可能希望澄清在这种情况下的预期行为。如果要删除它们,那么解决方法很简单。如果要保留它们,那么会有点困难,但可行。评论实际上是针对您的第一个解决方案。第二个解决方案会很好。@cs95谢谢您的解决方案!理想情况下,我希望删除具有任意阈值的前导行,例如,第一个值高于20,或者第一个值低于20-10@NickD我的第二个解决方案会奏效。为了清晰起见,请看一看我编辑的。
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