问题描述
我有以下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