Pandas Dataframe删除具有特定值的行,直到该值更改为止

时间:2016-09-06 15:17:24

标签: python pandas dataframe

我在数据框的顶部有一个零的数据框。这些零作为NA。我想删除它们,直到其他值开始出现。

所以,我想要这个数据帧:

    df_
    Out[114]: 
                    A         B         C
    2016-08-27 -0.263963  0.000000  0.693514
    2016-08-28 -0.085663  0.000000 -0.715981
    2016-08-29  1.408283  0.000000  2.513716
    2016-08-30 -0.591532  0.000000 -1.468227
    2016-08-31 -0.973261  0.000000  0.848670
    2016-09-01  0.694384 -0.214615  0.561752
    2016-09-02 -1.468527  0.259413  1.195574
    2016-09-03 -1.471785  0.006788  0.688078
    2016-09-04 -0.817770  0.453037  0.632851
    2016-09-05  1.129863  0.000000 -0.296562

只删除前5行,但保留其余的行(包括最后的行),因为列'B'在前五行中包含零。

1 个答案:

答案 0 :(得分:4)

您可以使用all0测试所有行是否不等于axis=1,我们使用它来屏蔽df并调用first_valid_index并使用此片段进行切片df:

In [40]:
df.loc[df[(df != 0).all(axis=1)].first_valid_index():]

Out[40]:
                   A         B         C
2016-09-01  0.694384 -0.214615  0.561752
2016-09-02 -1.468527  0.259413  1.195574
2016-09-03 -1.471785  0.006788  0.688078
2016-09-04 -0.817770  0.453037  0.632851
2016-09-05  1.129863  0.000000 -0.296562

这是内部测试的输出:

In [37]:
(df != 0).all(axis=1)

Out[37]:
2016-08-27    False
2016-08-28    False
2016-08-29    False
2016-08-30    False
2016-08-31    False
2016-09-01     True
2016-09-02     True
2016-09-03     True
2016-09-04     True
2016-09-05    False
dtype: bool