Python:如何使用合并执行功能串联?

时间:2018-10-26 06:13:33

标签: python pandas

在使用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并执行相同的操作。我该如何使用合并?

对不起,我的英语,我在编程方面还是菜鸟,任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您可以将双mergeadd_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