我正在测试数据帧是否相等。
df_diff=(df1!=df2)
我明白了 df_diff 它的形状和 df* ,并包含布尔值 True/False .
df_diff
df*
True/False
现在我只想保留 df1 如果我这么做
df1
df1=[df_diff.values]
排 至少有一个 True 数据框差异 False 只是。
True
数据框差异
False
作为第二步,我希望能够替换所有相等(其中 df_diff==False )与 NaNs .
df_diff==False
NaNs
df1=pd.DataFrame(data=[[1,2,3],[4,5,6],[7,8,9]]) df2=pd.DataFrame(data=[[1,99,3],[4,5,99],[7,8,9]])
我想从
0 1 2 0 1 2 3 1 4 5 6 2 7 8 9
1 2 0 2 NaN 1 NaN 6
我想你需要 DataFrame.any 至少检查一次 True 每列的行数:
DataFrame.any
df = df_diff[df_diff.any(axis=1)]
可以像这样过滤两个原始数据帧:
df11 = df1[df_diff.any(axis=1)] df22 = df2[df_diff.any(axis=1)]
如果需要所有列和行:
df = df_diff.loc[df_diff.any(axis=1), df_diff.any()]
编辑:过滤器 d1 并添加 NaN s由 where :
d1
NaN
where
df_diff=(df1!=df2) m1 = df_diff.any(axis=1) m2 = df_diff.any() out = df1.loc[m1, m2].where(df_diff.loc[m1, m2]) print (out) 1 2 0 2.0 NaN 1 NaN 6.0