我有一个看起来像这样的数据框
>>> df
item count
id month
12 1 1351 19
585 11
2 1350 2
140 1
和另一个类似
的东西>>> usermap
id age gender
0 2 25 m
1 12 40 f
最终结果应为:
>>> df_merged
id age gender month item count
12 40 f 1 1351 19
585 11
2 1350 2
140 1
我想我可以做:
df1 = df.reset_index()
df_merged = pd.merge(df1, usermap, on='id', how='left')
df_merged = df_merged.set_index(['id','age','gender','month'])
但是还有什么更好的解决方案,尤其是对于大型数据帧?
答案 0 :(得分:3)
一个带有DataFrame.join
,DataFrame.set_index
和DataFrame.reorder_levels
的想法:
df = (df.join(usermap.set_index('id'))
.set_index(['age','gender'], append=True)
.reorder_levels(['id','age','gender','month']))
print (df)
item count
id age gender month
12 40 f 1 1351 19
1 585 11
2 1350 2
2 140 1