在使用pandas.merge执行功能串联时遇到麻烦。
我有一个像这样的数据框:
id_A id_B t
1 2 1
2 3 0
3 4 1
...
还有另一个数据框,例如:
id f1 f2 f3
1 1 2 3
2 4 5 6
3 7 8 9
4 8 7 6
5 5 4 3
...
我想使用pandas.merge或join创建如下所示的输出:
id_A id_B f1_A f2_A f3_A f1_B f2_B f3_B t
1 2 1 2 3 4 5 6 1
2 3 4 5 6 7 8 9 0
3 4 7 8 9 8 7 6 1
...
基本上,这就像将dataframe_2中的3列f值(基于提供的id_A和id_B)插入到dataframe_1中,介于id_B和t之间。但是在阅读大量文档之后,我却没有这样做。
我遇到的问题是,如何使用合并执行此“插入”行为?当dataframe_1和2中的列名不同时,如何合并?
最后,据我所知,您基本上需要在dataframe_2中“搜索” id_A,并将其f1〜f3添加到dataframe_1中,然后“搜索” id_B并执行相同的操作。我该如何使用合并?
对不起,我的英语,我在编程方面还是菜鸟,任何帮助将不胜感激!
答案 0 :(得分:0)
您可以将双merge
与add_suffix
一起使用,然后通过concat
合并输出:
a = df1[['id_A']].merge(df2.set_index('id').add_suffix('_A'),left_on='id_A', right_index=True)
b = df1[['id_B']].merge(df2.set_index('id').add_suffix('_B'),left_on='id_B', right_index=True)
cols = df1.columns.difference(['id_A','id_B'])
df = pd.concat([a,b, df1[cols]], axis=1)
print (df)
id_A f1_A f2_A f3_A id_B f1_B f2_B f3_B t
0 1 1 2 3 2 4 5 6 1
1 2 4 5 6 3 7 8 9 0
2 3 7 8 9 4 8 7 6 1