我使用三个数据帧: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))
这是我第一篇关于堆栈溢出的文章,所以我希望我做的每件事都是正确的。如果我没有,或者我的文字不清楚,请道歉。
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'}
如果这不是你想要的,请告诉我。或者,如果有任何特定的数据点你试图比较。