python - 合并具有不同 left_on 和 right_on 长度列表的两个数据帧

标签 python pandas merge

我有以下问题。我有两个数据框,想根据第一个数据框中的两列和第二个数据框中的一列合并它们:

import pandas as pd

new1 = pd.DataFrame({0:['a','b','c'], 1:['q1','q2','q3'], 2:['t3','t2','t1']})
new2 = pd.DataFrame({0:['aq1','bq2','cq3'], 1:['la1','la2','la3']})
pd.merge(new1,new2, how='inner', left_on=[0,1], right_on=[0])

此代码无效,因为

ValueError: len(right_on) must equal len(left_on)

pandas 是否有针对这种情况的一些标准方法?或者解决问题的唯一方法是在 new1 数据框中创建附加列:

import pandas as pd

new1 = pd.DataFrame({0:['a','b','c'], 1:['q1','q2','q3'], 2:['t3','t2','t1']})
new1[3] = new1[0] + new1[1]
new2 = pd.DataFrame({0:['aq1','bq2','cq3'], 1:['la1','la2','la3']})
print(pd.merge(new1,new2, how='inner', left_on=[3], right_on=[0]))

最佳答案

您可以在合并中进行求和而不是创建新列。

pd.merge(new1,new2, how='inner', left_on=[new1[0]+new1[1]], right_on=[0]) 

你得到

    0_x 1_x 2   0_y 1_y
0   a   q1  t3  aq1 la1
1   b   q2  t2  bq2 la2
2   c   q3  t1  cq3 la3

关于python - 合并具有不同 left_on 和 right_on 长度列表的两个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43879414/

相关文章:

r - 通过 ID 和 R 中的某个因子分布创建一个随机子样本

python - 什么是numpy等效于random.sample?

python - 当我尝试使用 pandas 对 csv 文件求和时,它不起作用

arrays - 为什么自顶向下归并排序中数组访问是 6NlogN?

pandas - 如何使用 Pandas 计算分类特征的数量?

python - 基于月份提取 pandas 数据框的子集

python - 类似于 2to3 的工具,除了合并

python - 对象不可调用

python - 设置可变长度列表内容的格式

python - PyEphem 中 ephem.date(...) 和 ephem.Date(...) 的区别