在pandas数据框中,如何删除某列之后具有零的所有行。例如
from pandas import DataFrame
df = DataFrame({'a' : [0,1,1,0,0,0,0], 'b' : [0,1,-1, 1,0,0,0], 'c': [1,4,5,6,7,0,0]}).T
df:
0 1 2 3 4 5 6
a 0 1 1 0 0 0 0
b 0 1 -1 1 0 0 0
c 1 4 5 6 7 0 0
如何在第3列之后将包含所有值的行拖放为零?此示例中的第一行和第二行(索引a
和b
)将被删除。
答案 0 :(得分:2)
您可以下标列,将0
替换为NaN
,删除任何不具有至少1个非NaN
值的行,并在索引上使用loc
:
In [63]:
df.loc[df[df.columns[4:]].replace(0, NaN).dropna(thresh=1).index]
Out[63]:
0 1 2 3 4 5 6
c 1 4 5 6 7 0 0
所以打破这个:
In [64]:
df[df.columns[4:]]
Out[64]:
4 5 6
a 0 0 0
b 0 0 0
c 7 0 0
In [66]:
df[df.columns[4:]].replace(0, NaN)
Out[66]:
4 5 6
a NaN NaN NaN
b NaN NaN NaN
c 7 NaN NaN
In [67]:
df[df.columns[4:]].replace(0, NaN).dropna(thresh=1)
Out[67]:
4 5 6
c 7 NaN NaN
In [68]:
df[df.columns[4:]].replace(0, NaN).dropna(thresh=1).index
Out[68]:
Index(['c'], dtype='object')
<强>更新强> 实际上更简洁:
In [77]:
df[any(df[df.columns[4:]] != 0, axis=1)]
Out[77]:
0 1 2 3 4 5 6
c 1 4 5 6 7 0 0
答案 1 :(得分:2)
如果您有任意数量的列,您可以随时执行:
df[ df.ix[:, 4:].T.abs().sum() != 0 ]
答案 2 :(得分:0)
df[(df[4] != 0) | (df[5] != 0) | (df[6] != 0)]