我希望将数据框与其他两个数据框进行比较,并在条目存在时添加新列。
EG。
的 Base_df -
的 |钥匙| A | B |
| key1 | a1 | b1 |
| key1 | a1 | b1 |
| key1 | a1 | b2 |
| key2 | a2 | b2 |
df_2 -
的 |钥匙| A | B |
| key1 | a1 | b1 |
| key1 | a1 | b1 |
| key1 | a1 | b1 |
| key1 | a1 | b1 |
| key1 | a1 | b1 |
df_3 -
的 |钥匙| A | B |
| key1 | a1 | b1 |
| key1 | a1 | b2 |
| key2 | a2 | b2 |
输出应该是 -
的 OutputBase_df -
的 |钥匙| A | B | df2 | df3 |
| key1 | a1 | b1 | 1 | 1 |
| key1 | a1 | b1 | 1 | 0 |
| key1 | a1 | b2 | 0 | 1 |
| key2 | a2 | b2 | 0 | 1 |
答案 0 :(得分:0)
您可以join
将所有项目合并为一个,然后我们使用isin
,cumcount
为重复创建相同的密钥
s1=df1.apply(','.join,1)
s2=df2.apply(','.join,1)
s3=df3.apply(','.join,1)
s1=s1+','+s1.groupby(s1).cumcount().astype(str)
s2=s2+','+s2.groupby(s2).cumcount().astype(str)
s3=s3+','+s3.groupby(s3).cumcount().astype(str)
df1['df2'],df1['df3']=s1.isin(s2).astype(int),s1.isin(s3).astype(int)
df1
Out[308]:
Key A B df2 df3
0 key1 a1 b1 1 1
1 key1 a1 b1 1 0
2 key1 a1 b2 0 1
3 key2 a2 b2 0 1
答案 1 :(得分:0)
您正在尝试进行完全外部联接。为此,您可以将merge()方法与how =' outer'一起使用。选项ex:
df_1['df_1'] = 1
df_2['df_2'] = 1
result_df = df_1.merge(df_2, how='outer').merge(Base_df, how='outer')