python - Pandas 数据框使用多列连接
问题描述
我正在使用多列进行数据框外连接:
DF1:
ColumnA ColumnB ColumnC ColumnD
1 2 3 4
1 2 3 4
DF2:
ColumnE ColumnF ColumnG ColumnH
1 2 3 4
1 2 3 4
合并代码:
df= pd.merge(DF1, DF2, left_on=['ColumnA','ColumnB','ColumnC','ColumnD'], right_on=['ColumnE','ColumnF','ColumnG','ColumnH'], how='outer')
实际结果:
ColumnA ColumnB ColumnC ColumnD ColumnE ColumnF ColumnG ColumnH
1 2 3 4 1 2 3 4
1 2 3 4 1 2 3 4
1 2 3 4 1 2 3 4
1 2 3 4 1 2 3 4
预期结果(值应仅显示两次,因为列组合在两个数据集中完全匹配):
ColumnA ColumnB ColumnC ColumnD ColumnE ColumnF ColumnG ColumnH
1 2 3 4 1 2 3 4
1 2 3 4 1 2 3 4
有人可以建议我哪里出错了吗?
解决方案
df1
您在和上都有相同的重复项df2
,因此每个重复项的合并df
行数加倍。简单的解决方案是保持一个数据帧的唯一性,drop_duplicates
并且merge
df = pd.merge(df1.drop_duplicates(), df2, left_on=['ColumnA','ColumnB' ,'ColumnC','ColumnD'], right_on=['ColumnE','ColumnF','ColumnG','ColumnH'], how='outer')
Out[742]:
ColumnA ColumnB ColumnC ColumnD ColumnE ColumnF ColumnG ColumnH
0 1 2 3 4 1 2 3 4
1 1 2 3 4 1 2 3 4
推荐阅读
- git - Git Status/Diff 忽略时间戳未更改的已更改文件
- ruby-on-rails - 如何使用 has_many 关联在 Rails 中排序?
- cors - Mixpanel JQL Cors 问题
- angular - 如何使用ngx soap从soap服务调用操作?
- reactjs - 设置组件状态,来自无法访问的变量
- android-studio - Android Studio突然损坏无法读取xml和java文件
- java - 这个“未知所有者”死锁是 JVM 错误吗,所有 Java 程序都会遭受它的影响吗?
- java - org.json.JSONException) org.json.JSONException: JSONObject["routes"] not found
- robotframework - 使用更新的案例版本恢复机器人运行
- python - Python 在创建父对象时从父对象添加子类