2017-04-14 3 views
1

각 데이터 프레임에는 공통으로 하나의 열 (post_id)이 있습니다. 각 DF처럼 보이는 방법의 예 :팬더 : 하나의 공통 열을 사용하여 여러 데이터 프레임 병합

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

그래서 각 DF 한 POST_ID있다 열,하지만 또한 각각의 필연적 인 안양에서 등 좋아하는, 총 개수, 이름이 같은 다른 열이 있습니다. 내 궁극적 인 목표는 csv에이 데이터 프레임을 작성하는 것이므로 post_id를 기반으로 이러한 모든 dfs를 그룹화 할 수있는 방법이 있습니까?

답변

0

데이터 프레임의 목록이 모두 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