熊猫如何比较2个数据帧的行而不考虑顺序

时间:2018-07-10 07:10:47

标签: python pandas

import pandas as pd
df1 = pd.DataFrame(index=[1,2,3,4])


df1['A'] = [1,2,5,4]
df1['B'] = [5,6,9,8]
df1['C'] = [9,10,1,12]

>>> df1
   A  B   C
1  1  5   9
2  2  6  10
3  5  9   1
4  4  8  12

我想比较df1的行并得到row1(1,5,9)== row3(5,9,1)的结果。

这意味着我只关心行中包含的项目,而忽略行中项目的顺序。

2 个答案:

答案 0 :(得分:2)

我认为需要按np.sort对每一行进行排序:

df2 = pd.DataFrame(np.sort(df1.values, axis=1), index=df1.index, columns=df1.columns)
print (df2)
   A  B   C
1  1  5   9
2  2  6  10
3  1  5   9
4  4  8  12

然后通过由duplicated创建的倒置(~)布尔掩码删除重复项:

df2 = pd.DataFrame(np.sort(df1.values, axis=1), index=df1.index)
print (df2)
   0  1   2
1  1  5   9
2  2  6  10
3  1  5   9
4  4  8  12

df1 = df1[~df2.duplicated()]
print (df1)
   A  B   C
1  1  5   9
2  2  6  10
4  4  8  12

答案 1 :(得分:0)

如果columnm中两次都没有值,则只需将您的columnns转换为set

row1 = df.iloc[1]
row3 = df.iloc[3] 
set(row1) == set(row3)

它的优点是您可以比较列,例如查找一个值是否存在,而另一个值不存在。

row1 - row3 # find the values that are in row1 but not in row3