2016-09-27 63 views
2

我有以下2個dataframes有:加入Python的數據幀的時間序列有效

day 
     date  val 
11740 2016-01-04 1.3970 
11741 2016-01-05 1.3991 
11742 2016-01-06 1.4084 
11743 2016-01-07 1.4061 

df 
     Adj_Close   Close  Date   High   Low 
182 12927.200195 12927.200195 2016-01-04 12928.900391  12748.50 
181 12920.099609 12920.099609 2016-01-05 12954.900391 12839.799805 
180 12726.799805 12726.799805 2016-01-06 12854.599609 12701.700195 
179 12448.200195 12448.200195 2016-01-07 12661.200195 12439.099609 

我有一個俗氣環路aligh通過創建一個新的數據框(new_df)日期'加入'通用日期。

new_df = pd.DataFrame(columns=['date', 'close', 'fx', 'usd']) 

for indexFx, rowFx in day.iterrows(): 
    for indexSt, rowSt in df.iterrows(): #this is not efficient 
     fxDate = str(rowFx.date)[:10] #only keep data component not time 
     if str(rowSt['Date']) == fxDate: 

      dateObj = datetime.strptime(rowSt.Date,'%Y-%m-%d') 
      row = [dateObj, rowSt.Close,rowFx.val, float(rowSt.Close) * float(rowFx.val)] 
      new_df.loc[len(new_df)] = row 

我知道有一種有效的方式來對這個循環進行Python化。有人可以幫忙嗎?

感謝

+2

'pd.merge(df,day,left_on ='Date',right_on ='date')'? – MaxU

+0

@MaxU我試過這個,但結果數據框是空白的,沒有數據? –

+2

您是否在兩個DF中有匹配的日期? – MaxU

回答

1
pd.concat([day.set_index('date'), df.set_index('Date')], axis=1) 

>>> 

       val  Adj_Close   Close   High \ 
2016-01-04 1.3970 12927.200195 12927.200195 12928.900391 
2016-01-05 1.3991 12920.099609 12920.099609 12954.900391 
2016-01-06 1.4084 12726.799805 12726.799805 12854.599609 
2016-01-07 1.4061 12448.200195 12448.200195 12661.200195 

        Low 
2016-01-04 12748.500000 
2016-01-05 12839.799805 
2016-01-06 12701.700195 
2016-01-07 12439.099609 

取決於如果你想要一個內部或外部的加入,你可以指定與join='inner'join='outer'

+0

嗯..謝謝@ vk1011,但第二個數據幀在連接時產生NaN。 –

+0

NaN可能表示不匹配的日期,一個幀包含另一個缺少的日期? – paisanco

+0

這是可能的,所以這個循環以上更好,不能在單獨的Pan​​das函數中完成以滿足要求 –

相關問題