Pandas: 使用一个公共列合并多个DataFrame

Pandas: Merge multiple DataFrames using one common column

我正在处理多个数据框,每个数据框都有一个共同的列,即 post_id。每个 df 的示例:

  post_id   post_likes  
  0          1
  1          2
  2          3
  3          4
  4          5
  5          6

所以每个 df 都有一列,其中有 post_id,但在每个后续 df 中还有另一列,例如喜欢,总计数,姓名等。有什么办法可以根据 post_id 将所有这些 dfs 组合成一个,因为我的最终目标是将此数据帧写入 csv。

import pandas as pd
df1 = pd.DataFrame(columns=['post_id','post_likes'], data={'post_id': range(6), 'post_likes': range(1,7)})
df2 = pd.DataFrame(columns=['post_id','post_shares'], data={'post_id': range(6), 'post_shares': range(11,17)})
pd.merge(df1,df2,on='post_id')

Out[12]:
   post_id  post_likes  post_shares
0        0           1           11
1        1           2           12
2        2           3           13
3        3           4           14
4        4           5           15
5        5           6           16

假设我有一长串数据帧,所有数据帧都有一列标记为 post_id 和另一列。

lodf = [df1, df2, df3, df4, df5]

您可以将它们与 pd.concat 放在一起。你只需要先设置索引

df = pd.concat([d.set_index('post_id') for d in lodf], axis=1).reset_index()

演示

df1 = pd.DataFrame(dict(post_id=[1, 2, 3], col1=[1, 2, 3]))
df2 = pd.DataFrame(dict(post_id=[1, 2, 3], col2=[1, 2, 3]))
df3 = pd.DataFrame(dict(post_id=[1, 2, 3], col3=[1, 2, 3]))
df4 = pd.DataFrame(dict(post_id=[1, 2, 3], col4=[1, 2, 3]))
df5 = pd.DataFrame(dict(post_id=[1, 2, 3], col5=[1, 2, 3]))

lodf = [df1, df2, df3, df4, df5]

df = pd.concat([d.set_index('post_id') for d in lodf], axis=1).reset_index()
df

   post_id  col1  col2  col3  col4  col5
0        1     1     1     1     1     1
1        2     2     2     2     2     2
2        3     3     3     3     3     3

​