删除数据框中在许多列中具有相同值的行

时间:2018-03-10 13:51:50

标签: python excel pandas numpy

我有一个表格如下,列名称随时间变化。我只想保留这些行,其中ww与ww12之间存在差异。在下表中,我想保留第3行和第7行并删除其他行。 在第3行ww17#ww12 在第7行ww16#ww12 请帮助我,提前谢谢。

    Type WW12       WW13        WW14        WW15        WW16        WW17        WW18        WW19        WW20
0   AA  1.999857143 1.999857143 1.999857143 1.999857143 1.999857143 1.999857143 1.999857143 1.999857143 1.999857143
1   AA  24000000    24000000    24000000    24000000    24000000    24000000    24000000    24000000    24000000
2   AA  1424.593143 1424.593143 1424.593143 1424.593143 1424.593143 1424.593143 1424.593143 1424.593143 1424.593143
3   BB  1.457285714 1.457285714 1.457285714 1.457285714 1.457285714 1.863928571 1.863928571 1.863928571 1.863928571
4   BB  24000000    24000000    24000000    24000000    24000000    24000000    24000000    24000000    24000000
5   BB  24000000    24000000    24000000    24000000    24000000    24000000    24000000    24000000    24000000
6   BB  1424.593143 1424.593143 1424.593143 1424.593143 1424.593143 1424.593143 1424.593143 1424.593143 1424.593143
7   BB  1.863928571 1.863928571 1.863928571 1.863928571 2.878857143 2.878857143 2.878857143 2.878857143 2.878857143
8   BB  24000000    24000000    24000000    24000000    24000000    24000000    24000000    24000000    24000000

1 个答案:

答案 0 :(得分:2)

使用boolean indexing

#create index by column Type
df1 = df.set_index('Type')
#compare column WW12 for not equal and get at least one True per rows
df2 = df[df1.ne(df1['WW12'], 0).any(1).values]
#if want compare by second column (first is Index here)
#df2 = df[df1.ne(df1.iloc[:, 0], 0).any(1).values]

如果只想比较第二列:

df2 = df[df.iloc[:, 1:].ne(df.iloc[:, 1], axis=0).any(axis=1)]
print (df2)
  Type      WW12      WW13      WW14      WW15      WW16      WW17      WW18  \
3   BB  1.457286  1.457286  1.457286  1.457286  1.457286  1.863929  1.863929   
7   BB  1.863929  1.863929  1.863929  1.863929  2.878857  2.878857  2.878857   

       WW19      WW20  
3  1.863929  1.863929  
7  2.878857  2.878857  

<强>解释

按位置选择第二列:

print (df.iloc[:, 1])
0    1.999857e+00
1    2.400000e+07
2    1.424593e+03
3    1.457286e+00
4    2.400000e+07
5    2.400000e+07
6    1.424593e+03
7    1.863929e+00
8    2.400000e+07
Name: WW12, dtype: float64

按位置删除第一列并将其与第二列进行比较:

print (df.iloc[:, 1:].ne(df.iloc[:, 1], axis=0))

    WW12   WW13   WW14   WW15   WW16   WW17   WW18   WW19   WW20
0  False  False  False  False  False  False  False  False  False
1  False  False  False  False  False  False  False  False  False
2  False  False  False  False  False  False  False  False  False
3  False  False  False  False  False   True   True   True   True
4  False  False  False  False  False  False  False  False  False
5  False  False  False  False  False  False  False  False  False
6  False  False  False  False  False  False  False  False  False
7  False  False  False  False   True   True   True   True   True
8  False  False  False  False  False  False  False  False  False

any比较每行至少一个True

print (df.iloc[:, 1:].ne(df.iloc[:, 1], axis=0).any(axis=1))
0    False
1    False
2    False
3     True
4    False
5    False
6    False
7     True
8    False
dtype: bool