2017-04-14 79 views
1

我正在处理多个数据帧,每个数据帧有一个共同的列,这是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。

回答

0

假设我有dataframes所有这些有标记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 

​ 
+0

谢谢!得到我想要的输出 – wolverinejohn

+0

@wolverinejohn如果解决了您的问题,请不要忘记接受答案。 – piRSquared

0
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