2016-12-21 1 views
1

DataFramesintradayには1分に1つの行があり、dailyには1日に1つの行があるとします。日中の値を日中のDataFrameにマージ

はどのようsome_valintraday.index値(日付成分)daily.index値(日付コンポーネント)に等しいdaily['some_val']行から取得され、カラムintraday['some_val']を追加することができますか?

答えて

1

あなたは、あなたが両方のインデックスの日付コンポーネントから列を作成し、代わりにその列に

daily['date'] = daily.index.date 
intraday['date'] = intraday.index.date  
daily.merge(intraday) 
  date some_val 
0  2016-01-01   0 
1  2016-01-01   0 
2  2016-01-01   0 
3  2016-01-01   0 
4  2016-01-01   0 
...   ...  ... 
8636 2016-01-06   5 
8637 2016-01-06   5 
8638 2016-01-06   5 
8639 2016-01-06   5 
8640 2016-01-07   6 

をマージすることができ、以下のセットアップ、

intraday = pd.DataFrame(index=pd.date_range('2016-01-01', '2016-01-07', freq='T')) 
daily = pd.DataFrame(index=pd.date_range('2016-01-01', '2016-01-07', freq='D')) 
daily['some_val'] = np.arange(daily.shape[0]) 

を考えます自動インデックスアラインメントを利用し、fillnaを使用できます。

intraday['some_val'] = daily['some_val'] 
intraday.fillna(method='ffill', downcast='infer') 
     some_val 
2016-01-01 00:00:00   0 
2016-01-01 00:01:00   0 
2016-01-01 00:02:00   0 
2016-01-01 00:03:00   0 
2016-01-01 00:04:00   0 
...      ... 
2016-01-06 23:56:00   5 
2016-01-06 23:57:00   5 
2016-01-06 23:58:00   5 
2016-01-06 23:59:00   5 
2016-01-07 00:00:00   6 

あなたdailyインデックスの時間コンポーネントが00:00ある場合にのみ動作することに注意してください。

+0

高周波数のDFと同じインデックスを持つDataFrameを生成するにはどうすればいいですか(この場合は 'intraday')?最初の例は反復インデックスを生成し、 'intraday'インデックスを破棄しているようです。注:2番目の例は、両方のDataFramesのより低い頻度で少なくとも1つの正確に同じDateTimeが発生した場合にのみ機能します。たとえば、「日中」に「毎日」のインデックスが含まれていても、それは失敗するでしょう。 – feetwet

+1

この場合、 'daily.merge(intraday).set_index(intraday.index)'を使うことができます。データフレームの1つのインデックスを保持するために 'merge 'を呼び出すことはできないと思われます([this answer](http://stackoverflow.com/questions/11976503/how-to-keep-index-when-usingを参照)。 -pandas-merge))。 –

関連する問題