如何解决合并2个数据帧,密钥分为2列
我有以下2个数据帧:
>>> df = pandas.DataFrame({'category':['A','A','B','C','C'],'type':['X','Y','X','Z','W'],'data':[21,36,32,26,34,30]})
>>> print(df)
category type data
0 A X 21
1 A Y 36
2 B X 32
3 B Z 26
4 C Y 34
5 C W 30
和这个:
>>> df2 = pandas.DataFrame({'category':['A','type1':['X','Y'],'type2':['Y','data2':[121,136,232]})
>>> print(df2)
category type1 type2 data2
0 A X Y 121
1 B X Z 136
2 C Y W 232
我想合并两个df,使其看起来像这样:
category type data data2
0 A X 21 121
1 A Y 36 121
2 B X 32 136
3 B Z 26 136
4 C Y 34 232
5 C W 30 232
我已经尝试过了:
>>> result_test = pd.merge(df,df2,how='left',left_on=['category','type'],right_on = ['category','type1'])
>>> print(result_test)
category type data type1 type2 data2
0 A X 21 X Y 121.0
1 A Y 36 NaN NaN NaN
2 B X 32 X Z 136.0
3 B Z 26 NaN NaN NaN
4 C Y 34 Y W 232.0
5 C W 30 NaN NaN NaN
,它在type1上合并。但是,如果我再次尝试使用类型2,它将再添加3列
解决方法
先尝试melt
,然后尝试merge
out = df1.merge(df2.melt(['category','data2'],value_name='type').drop('variable',1))
out
Out[40]:
category type data data2
0 A X 21 121
1 A Y 36 121
2 B X 32 136
3 B Z 26 136
4 C Y 34 232
5 C W 30 232
,
它不是仅合并在category
上吗?
df.merge(df2[['category','data2']],on='category')
输出:
category type data data2
0 A X 21 121
1 A Y 36 121
2 B X 32 136
3 B Z 26 136
4 C Y 34 232
5 C W 30 232
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。