我具有以下带有示例数据的DataFrame结构:
Col1 Col2 Col3
1 1 8
5 4 7
3 9 9
1 NaN NaN
列具有顺序排列,这意味着Col1在Col2之前,依此类推... 我想比较两个(或多个)后续列是否具有相同的值。如果是这样,我想删除整行。 NaN值可以出现,但不应视为具有相同的值
因此,在上面的行中,我希望删除第1行和第3行(第1行:Col1-> Col2相同的值,第3行:Col2-> Col3相同的值),并保留第2行和第4行数据框。
我该怎么做?谢谢!
答案 0 :(得分:1)
使用DataFrame.diff
并过滤行(如果不存在,则每行不存在0
值,DataFrame.ne
表示不相等,DataFrame.all
测试是否所有True
并过滤boolean indexing
:
df = df[df.diff(axis=1).ne(0).all(axis=1)]
print (df)
Col1 Col2 Col3
1 5 4.0 7.0
3 1 NaN NaN
详细信息:
print (df.diff(axis=1))
Col1 Col2 Col3
0 NaN 0.0 7.0
1 NaN -1.0 3.0
2 NaN 6.0 0.0
3 NaN NaN NaN
print (df.diff(axis=1).ne(0))
Col1 Col2 Col3
0 True False True
1 True True True
2 True True False
3 True True True
print (df.diff(axis=1).ne(0).all(axis=1))
0 False
1 True
2 False
3 True
dtype: bool