【问题标题】:Problem comparing 2 DataFrames, returns wrong result比较 2 个 DataFrame 时出现问题,返回错误结果
【发布时间】:2019-08-23 09:05:23
【问题描述】:

有2个dfs

df1 和 df2


df1 contains:

    account_id  account_name
0   37469426    Name1
1   71508517    Name2
2   85304427    Name3
3   115964688   Name4
4   119853529   Name4

df2 contains:

    account_id  account_name
0   37469426    Name1
1   71508517    Name2
2   85304427    Name3
3   115964688   Name4
4   119853529   Name4
5       1111            Test

我想比较它们,在 df3 中是 df1 中不在 df2 中的值

在这种情况下,它应该什么也不返回。

数据类型相同,列相同,值的数量不同。

我试过concat和merge,但是结果是错误的。


merged = pd.merge(df1 , df2, on=['account_id', 'account_name'], how='right')

#returns:

    account_id  account_name
0   37469426    Name1
1   71508517    Name2
2   85304427    Name3
3   115964688   Name4
4   119853529   Name5

merged = pd.merge(df1 , df2, on=['account_id', 'account_name'], how='left')

#returns:

0   37469426    Name1
1   71508517    Name2
2   85304427    Name3
3   115964688   Name4
4   119853529   Name4
5       1111            Test

#inner / outer return everything

0   37469426    Name1
1   71508517    Name2
2   85304427    Name3
3   115964688   Name4
4   119853529   Name4
5       1111            Test

compare_ga_accounts = pd.concat([df1 , df2])
compare_ga_accounts.drop_duplicates(keep=False, inplace=True)

#returns:

    account_id  account_name
0   1111            Test

我不知道为什么会这样((

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以只使用isin 来比较列值。例如,

     compare_ga_accounts = df1[~(df1.iloc[:, 0].isin(list(df2.iloc[:, 0])))|(~df1.iloc[:, 1].isin(list(df2.iloc[:, 1])))] 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多