【发布时间】:2019-01-18 05:57:32
【问题描述】:
假设我有以下 2 个 DataFrame:
df1,其索引为 ['NameID', 'Date']。例如,df1 可以是公司员工历史工资的面板数据集。
df2,其索引为 ['NameID']。例如,df2 可以是员工生日和 SSN 的数据集。
在 'NameID' 上将 df1 和 df2 作为 1:m 的索引加入的最有效方法是什么? DataFrame.join() 不允许 1:m 加入。我知道我可以先对 df1 和 df2 都进行 reset_index(),然后使用 DataFrame.merge() 将它们加入列,但我认为这效率不高。
代码:
df1 = pd.DataFrame({'NameID':['A','B','C']*3,
'Date':['20180801']*3+['20180802']*3+['20180803']*3,
'Salary':np.random.rand(9)
})
df1 = df1.set_index(['NameID', 'Date'])
df1
NameID Date Salary
A 20180801 0.831064
B 20180801 0.419464
C 20180801 0.239779
A 20180802 0.500048
B 20180802 0.317452
C 20180802 0.188051
A 20180803 0.076196
B 20180803 0.060435
C 20180803 0.297118
df2 = pd.DataFrame({'NameID':['A','B','C'],
'SSN':[999,888,777]
})
df2 = df2.set_index(['NameID'])
df2
NameID SSN
A 999
B 888
C 777
我想要得到的结果是:
NameID Date Salary SSN
A 20180801 0.831064 999
A 20180802 0.500048 999
A 20180803 0.076196 999
B 20180801 0.419464 888
B 20180802 0.317452 888
B 20180803 0.060435 888
C 20180801 0.239779 777
C 20180802 0.188051 777
C 20180803 0.297118 777
【问题讨论】:
-
如果你创建了minimal reproducible example会更有帮助
-
你尝试合并索引吗?例如,df3 = pd.merge(df1, df2, left_index=True, right_index=True)
-
谢谢沃里克。我想我现在已经准备好你的答案了......我不敢相信它是如此简单。我完全被这篇文章中的最佳答案误导了,认为合并不能用于合并索引...stackoverflow.com/questions/36538780/…。请发表你的答案,我会选择它。
-
不用担心。很高兴它有帮助!