删除dataframe中在许多列中具有相同值的行

2024-05-13 22:01:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个如下的表格和列名随时间的变化。我只想保留这些行中的任何ww与ww12之间的差异。在下表中,我想保留第3行和第7行,并删除其他行。 第三排第17次世界大战第12次世界大战 第7排第16次世界大战第12次世界大战 请帮帮我,提前谢谢

    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

Tags: type时间差异表格aabbww帮帮我
1条回答
网友
1楼 · 发布于 2024-05-13 22:01:40

使用^{}

#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

^{}比较每行至少一个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

相关问题 更多 >