python - 如何基于没有列顺序的两列合并数据框?
问题描述
我遇到了以下问题。我想合并多列上的两个数据框。示例数据帧如下: df1:
df1:
playerA playerB Weight
kim lee 1
jackson kim 3
dan lee 4
df2:
name1 name2 score
dan lee 11
dan kim 23
jackson kim 44
lee kim 35
Jackson lee 26
lee dan 27
我想基于两列合并这两个数据框。
df1[['playerA','playerB']],df2[['name1','name2']]
但问题是,我想合并这两个数据框而不考虑列的顺序。
我试过
result = pd.merge(df1, df2, on =df1[['playerA','playerB']],df2[['name1','name2']])
但它没有用。
这就是我想要的,
df1:
playerA playerB Weight score
kim lee 1
jackson kim 3
dan lee 4
I want to merge df1 and df2 by using two columns from each data frame without considering the order
(df1[['playerA','playerB']],df2[['name1','name2']])
df2_merge:
name1 name2 score weight
dan lee 11 4
kim lee 23 1
jackson kim 44 3
lee kim 35 1
kim jacson 26 3
lee dan 27 4
And then I want to delete the row which has the same name list.
Thus, here is my final wishes
df2_merge_ final:
name1 name2 score weight
dan lee 11 4
kim lee 23 1
jackson kim 44 3
我不确定还能尝试什么。有什么建议吗?谢谢 :)
解决方案
您可以添加由排序值填充的新列,然后merge
与删除不必要的列一起使用:
df1[['a','b']] = np.sort(df1[['playerA','playerB']], axis=1)
df2[['a','b']] = np.sort(df2[['name1','name2']], axis=1)
result = pd.merge(df1, df2, on=['a','b']).drop(['a','b','name1','name2'], axis=1)
print (result)
playerA playerB Weight score
0 kim lee 1 35
1 jackson kim 3 44
2 dan lee 4 11
3 dan lee 4 27
如果需要第一个唯一组合添加DataFrame.drop_duplicates
:
df1[['a','b']] = np.sort(df1[['playerA','playerB']], axis=1)
df2[['a','b']] = np.sort(df2[['name1','name2']], axis=1)
df2 = df2.drop_duplicates(['a','b'])
result = pd.merge(df1, df2, on=['a','b']).drop(['a','b','name1','name2'], axis=1)
print (result)
playerA playerB Weight score
0 kim lee 1 35
1 jackson kim 3 44
2 dan lee 4 11
推荐阅读
- python - Plotly:如何在箱线图中更改晶须的长度(最小/最大)?
- arrays - 如何在遵循相同顺序的同时更改数组的开始和结束项?
- mysql - 查找平均工资最高的部门名称
- java - 单选按钮未显示
- docker - 使用 Jenkins 在 Docker 中运行 Gradle 构建时无法 cd 到目录
- python - TypeError:'int'对象不可迭代如何解析python dict
- python - 具有多个输入参数和多个输出参数的神经网络
- mysql - Docker:多个mysql容器
- pdf - PDF 文件元数据的批处理编辑器
- logging - 如何将日志聚合到 splunk 中的持久表?