2017-05-17 1 views
0

에 따라 두 Dataframes 가입 I가 다음과 같은 두 가지 Dataframes :인덱스 및 열

DF1 :

DF2
  Id 
date   
2014-03-13 1 
2014-03-14 2 
2014-03-15 1 

: 내가하고 싶은 무엇

  Id people value 
date       
2014-03-13 1  A -3.0 
2014-03-13 1  B -6.0 
2014-03-13 4  C -3.2 
2014-03-14 1  A -3.1 
2014-03-14 2  B -5.0 
2014-03-14 2  C -3.4 
2014-03-14 7  D -6.2 
2014-03-14 8  E -3.2 
2014-03-15 1  A -3.2 
2014-03-15 3  B -5.9 

이 병합하는 것입니다 두 데이터 프레임은 Id을 기반으로 일관되게 색인 (date)을 사용합니다.

원하는 결과는 다음과 같다 : 내가 mergejoin하지만 성공하지를 사용하도록 열심히 노력했다

  Id people value 
date       
2014-03-13 1  A -3.0 
2014-03-13 1  B -6.0 
2014-03-14 2  B -5.0 
2014-03-14 2  C -3.4 
2014-03-15 1  A -3.2 

.

입력을 생성하는 코드는 다음

import pandas as pd 

dates = [pd.to_datetime('2014-03-13', format='%Y-%m-%d'), pd.to_datetime('2014-03-14', format='%Y-%m-%d'), pd.to_datetime('2014-03-15', format='%Y-%m-%d')] 
Ids = [1,2,1] 
df1 = pd.DataFrame({'Id': pd.Series(Ids, index=dates)}) 
df1.index.name = 'date' 

dates = [pd.to_datetime('2014-03-13', format='%Y-%m-%d'), pd.to_datetime('2014-03-13', format='%Y-%m-%d'), 
     pd.to_datetime('2014-03-13', format='%Y-%m-%d'), pd.to_datetime('2014-03-14', format='%Y-%m-%d'), 
     pd.to_datetime('2014-03-14', format='%Y-%m-%d'),pd.to_datetime('2014-03-14', format='%Y-%m-%d'), 
     pd.to_datetime('2014-03-14', format='%Y-%m-%d'), pd.to_datetime('2014-03-14', format='%Y-%m-%d'), 
     pd.to_datetime('2014-03-15', format='%Y-%m-%d'), pd.to_datetime('2014-03-15', format='%Y-%m-%d')] 
Ids = [1,1,4,1,2,2,7,8,1,3] 
peoples = ['A','B','C','A','B','C','D','E','A','B'] 
values = [-3,-6,-3.2,-3.1,-5,-3.4,-6.2,-3.2,-3.2,-5.9] 
df2 = pd.DataFrame({'Id': pd.Series(Ids, index=dates), 
        'people': pd.Series(peoples, index=dates), 
        'value': pd.Series(values, index=dates)}) 
df2.index.name = 'date' 

답변

1

simpliest는 merge + reset_index이다 : 또한

df = pd.merge(df1.reset_index(), df2.reset_index(), on=['date','Id']).set_index('date') 
print (df) 
date  Id people value 
2014-03-13 1  A -3.0 
2014-03-13 1  A -6.0 
2014-03-14 2  B -5.0 
2014-03-14 2  A -3.4 
2014-03-15 1  F -3.2 

: 그리고

df = pd.merge(df1.set_index('Id', append=True), 
      df2.set_index('Id', append=True), 
      left_index=True, 
      right_index=True) 
print (df) 
       people value 
date  Id    
2014-03-13 1  A -3.0 
      1  A -6.0 
2014-03-14 2  B -5.0 
      2  A -3.4 
2014-03-15 1  F -3.2