2017-04-14 4 views
1

Ich arbeite mit mehreren Datenrahmen, von denen jeder eine Spalte gemeinsam hat, die post_id ist. Ein Beispiel, wie jeder df wie folgt aussieht:Pandas: Mehrere DataFrames mit einer gemeinsamen Spalte verschmelzen

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

So jede df hat eine Spalte, die post_id hat, sondern auch eine weitere Spalte wie Vorlieben, Gesamtzahl, Namen usw. in jeder daraus folgenden df. Gibt es eine Möglichkeit, all diese dfs in eine basierend auf post_id zu gruppieren, weil mein ultimatives Ziel ist, diesen Datenrahmen in einen csv zu schreiben.

Antwort

0

nehme ich eine lange Liste von Datenrahmen haben alle eine Spalte post_id und eine weitere Spalte mit der Bezeichnung haben.

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

Sie können sie alle zusammen mit pd.concat setzen. Sie haben sich

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

Demo

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

Dank den Index zu setzen! Habe die Ausgabe, die ich wollte – wolverinejohn

+0

@wolverinejohn vergessen Sie nicht, die Antwort zu akzeptieren, wenn es Ihr Problem gelöst hat. – 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 
Verwandte Themen