比较Python pandas中的三个数据帧和重复的条目

时间:2018-06-04 13:50:03

标签: python pandas

我希望将数据框与其他两个数据框进行比较,并在条目存在时添加新列。

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 |

2 个答案:

答案 0 :(得分:0)

您可以join将所有项目合并为一个,然后我们使用isincumcount为重复创建相同的密钥

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')