2015-02-03 3 views
3
에 여러 dataframes 병합

I가 하나 개의 데이터 프레임 DF :은 하나 개를 사용하여 팬더

fruit  date volume 
0 apple 20141001 2000 
1 apple 20141101 1800 
2 apple 20141201 2200 
3 orange 20141001 1900 
4 orange 20141101 2000 
5 orange 20141201 3000 
…. 

나는 두 개의 데이터 프레임

사과 다음과 같습니다

date  price 
0 20141001 2 
1 20141101 2.5 
2 20141201 3 

오렌지 :

date  price 
0 20141001 1.5 
1 20141101 2 
2 20141201 2 

어떻게 병합 할 수 있습니까? 다음 데이터 프레임에서 이러한 :

이 그냥 예입니다
fruit  date price volume 
0 apple 20141001 2  2000 
1 apple 20141101 2.5  1800 
2 apple 20141201 3  2200 
3 orange 20141001 1.5  1900 
4 orange 20141101 2  2000 
5 orange 20141201 2  3000 
…. 

, 내 실제 작업에서, 나는 가격 데이터와 '과일'수백 첫 번째 데이터 프레임에 통합 될 필요가있다.

병합 또는 결합해야합니까? 그들 사이의 차이점은 무엇입니까? 고맙습니다.

+0

는'join'는 엄지 손가락의 규칙으로, 아래 merge''사용' – EdChum

답변

5

concat을 두 번 수행하여 원하는 결과를 얻을 수있는 샘플 데이터의 경우 마지막 두 dfs가 마스터 df와 일치한다고 가정합니다. 단일 DF 행 방향으로 내부 concat 연접 2 supplemnentary DFS, 열 현명한 외부 concat을 병합 :

In [56]: 
# this concats the 2 supplementary dfs row-wise into a single df 
pd.concat([df1,df2], ignore_index=True) 
Out[56]: 
     date price 
0 20141001 2.0 
1 20141101 2.5 
2 20141201 3.0 
3 20141001 1.5 
4 20141101 2.0 
5 20141201 2.0 
In [54]: 
# now concat column-wise with the main df 
pd.concat([df,pd.concat([df1,df2], ignore_index=True)], axis=1) 
Out[54]: 
    fruit  date volume  date price 
0 apple 20141001 2000 20141001 2.0 
1 apple 20141101 1800 20141101 2.5 
2 apple 20141201 2200 20141201 3.0 
3 orange 20141001 1900 20141001 1.5 
4 orange 20141101 2000 20141101 2.0 
5 orange 20141201 3000 20141201 2.0 

그러나, 실제 데이터를 당신이해야 할 것은의 가격 열을 추가하는 것입니다 각 과일 :

In [55]: 

df[df['fruit'] == 'apple'].merge(df1, on='date') 
Out[55]: 
    fruit  date volume price 
0 apple 20141001 2000 2.0 
1 apple 20141101 1800 2.5 
2 apple 20141201 2200 3.0 

각 과일

실제 데이터 문제에 대한 접근 방법을 다시 반복 각 보충 DF에 '과일'열을 추가 모든을 연결 한 후 사용 '을 다시 병합하는 것 과일 '과 키와 같은 '날짜'열 : 당신이 다음 사용하지 않을 경우 다음`join`을 사용하여 인덱스에 가입하려는 경우

In [57]: 

df1['fruit'] = 'apple' 
df2['fruit'] = 'orange' 
fruit_df = pd.concat([df1,df2], ignore_index=True) 
fruit_df 
Out[57]: 
     date price fruit 
0 20141001 2.0 apple 
1 20141101 2.5 apple 
2 20141201 3.0 apple 
3 20141001 1.5 orange 
4 20141101 2.0 orange 
5 20141201 2.0 orange 
In [58]: 

df.merge(fruit_df, on=['fruit', 'date']) 
Out[58]: 
    fruit  date volume price 
0 apple 20141001 2000 2.0 
1 apple 20141101 1800 2.5 
2 apple 20141201 2200 3.0 
3 orange 20141001 1900 1.5 
4 orange 20141101 2000 2.0 
5 orange 20141201 3000 2.0 
+0

인가 merge' groupby를 사용할 수 있습니까? – user6396

+0

@ user6396 당신은 과일과 날짜를 groupby 할 수 있고 그 다음에 가격을 정할 수 있습니다. 그러나 당신이 그들에 식별자가없는 dfs가 많은 경우 (즉 과일 열), 모든 것을 설정하지 않고 다시 병합 할 수는 없습니다 같은 가격의 날짜와 일치하는 행, 당신이 할 수있는 일은 각각의 보충 df에 과일 열을 추가하고, 보충 dfs를 모두 연결 한 다음 과일 열과 날짜 열을 사용하여 다시 합칠 수 있습니다. 이것에 접근하다 – EdChum

관련 문제