【问题标题】:How to use merge in pandas with multiple dataframes to find unique elements [duplicate]如何在具有多个数据框的熊猫中使用合并来查找唯一元素[重复]
【发布时间】:2021-05-19 23:05:10
【问题描述】:

我正在使用三个数据框:df_1、df_2 和 df_3。

它们有不同的行数和列数,以及不同的信息。每个数据框都按国家/地区名称进行索引,这就是它们之间的联系。

我们的想法是找到三者的交集,并确定当我们进行该交集时丢失了多少独特元素。

我首先从创建它们的函数中调用这些 df:

df_1, df_2, df_3 = load_data()

merged_1 = pd.merge(df_1, df_2, how = 'inner', left_index = True, right_index = True)
merged_2 = pd.merge(merged_1, df_3, how = 'inner', left_index = True, right_index = True)

unique_df_1 = pd.merge(df_1, merged_2, how = 'left', left_index = True, right_index = True, 
                          indicator = True).query('_merge=="left_only"')

unique_df_2 = pd.merge(df_2, merged_2, how = 'left', left_index = True, right_index = True, 
                      indicator = True).query('_merge=="left_only"')

unique_df_3 = pd.merge(df_3, merged_2, how = 'left', left_index = True, right_index = True,
                          indicator = True).query('_merge=="left_only"')

return (len(unique_df_1)+len(unique_df_2)+len(unique_df_3))

这是我关于堆栈溢出的第一篇文章,所以我希望我做的一切都是正确的。如果我没有或者我的文字不清楚,请道歉。

【问题讨论】:

  • 欢迎来到 SO,那里有很多文字,很遗憾您缺少 minimal reproducible example 请提供一个,至少应该有示例输入(复制粘贴)和预期输出。跨度>
  • 嗨,安德烈亚斯,谢谢!会的。

标签: python pandas dataframe merge


【解决方案1】:
df1 = pd.DataFrame({'z1':range(6), 'z2':[5,3,6,9,2,4]}, index=list('abcdef'))
df2 = pd.DataFrame({'x1':range(4), 'x2':[10,20,30, 40]}, index=list('abhi'))
df3 = pd.DataFrame({'y1':range(5), 'y2':[11,22,33, 44, 55]}, index=list('abktf'))

print(df1)

z1  z2
a   0   5
b   1   3
c   2   6
d   3   9
e   4   2
f   5   4

print(df2)

x1  x2
a   0  10
b   1  20
h   2  30
i   3  40

print(df3)

   y1  y2
a   0  11
b   1  22
k   2  33
t   3  44
f   4  55

df4 = pd.merge(df1, df2, left_index=True, right_index=True)
df5 = pd.merge(df4, df3, left_index=True, right_index=True)

print(df5)

   z1  z2  x1  x2  y1  y2
a   0   5   0  10   0  11
b   1   3   1  20   1  22

您是否正在尝试查找独特/缺失的国家/地区?你可以用更简单的方法来做:

set_1 = set(df1.index)
set_2 = set(df2.index)
set_3 = set(df3.index)

print(set_1)
print(set_2)
print(set_3)

>> {'d', 'b', 'e', 'a', 'f', 'c'}
>> {'a', 'i', 'b', 'h'}
>> {'b', 't', 'f', 'a', 'k'}

您可以通过以下方式获得所有三个集合之间的交集:

set_4 = set_1.intersection(set_2).intersection(set_3)
print(set_4)
>> {'a', 'b'}

df1 中缺少的国家/地区:

print(set_1.difference(set_4))
>> {'d', 'f', 'c', 'e'}

如果这不是您要找的,请告诉我。或者,如果您尝试比较任何特定的数据点。

【讨论】:

  • 嘿萨克沙姆。感谢您的回答!这绝对有帮助,感谢您解释我写的内容。不幸的是,您的解决方案让我得到了与我尝试过的方法相同的答案!我想知道的是如何获得这张图片中除了紫色部分之外的所有内容:dhanapalan.com/wp-content/uploads/2017/03/Venn-diagram.png
  • 我想通了。 excel文件中的一些数据有上标数字,所以当我删除这些数据时,一切都正确地加起来了。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2016-05-01
  • 2019-01-26
  • 2016-07-24
  • 2021-07-28
  • 2022-11-17
  • 2021-02-14
  • 1970-01-01
  • 2018-11-04
相关资源
最近更新 更多