比较两个熊猫数据帧的内容,即使行的顺序不同

时间:2019-03-26 13:23:20

标签: python pandas dataframe

我有两个熊猫数据框,它们的行顺序不同,但包含相同的列。 我的目标是轻松比较两个数据框并确认它们都包含相同的行。

我已经尝试过“等于”功能,但是似乎缺少了某些东西,因为结果不符合预期:

df_1 = pd.DataFrame({1: [10,15,30], 2: [20,25,40]})
df_2 = pd.DataFrame({1: [30,10,15], 2: [40,20,25]})
df_1.equals(df_2)

我希望结果返回True,因为两个数据帧都包含相同的行,只是顺序不同,但是返回False。

3 个答案:

答案 0 :(得分:2)

尝试排序和重置索引

df_1.sort_values(by=[1,2]).equals(df_2.sort_values(by=[1,2]).reset_index(drop=True))

答案 1 :(得分:1)

您可以指定要在DataFrame.sort_values中进行排序的列-在我的解决方案中,按所有列进行排序,而drop=True的{​​{1}}与DataFrames中的默认索引都是相同的。

df11 = df_1.sort_values(by=df_1.columns.tolist()).reset_index(drop=True)
df21 = df_2.sort_values(by=df_2.columns.tolist()).reset_index(drop=True)
print (df11.equals(df21))
True

答案 2 :(得分:0)

如果两个相似数据帧的列和行的顺序不同,以下是这种情况的解决方案:

对列进行排序

df_1 = df_1[df_2.columns]

选择列对行进行排序 w.r.t.

ref_len = 0
for col in df_1.columns:
    if(len(set(df_1[col])) > ref_len):
        final_col = col
        ref_len = len(set(df_1[col]))

对行进行排序

df11 = df_1.sort_values(by=[final_col]).reset_index(drop=True)
df21 = df_2.sort_values(by=[final_col]).reset_index(drop=True)

df11.equals(df21)