2016-11-29 2 views
2

私は2つのデータフレームdf1とdf2を持っています。datetimeに基づくデータフレームの内部結合

df1.index 
DatetimeIndex(['2001-09-06', '2002-08-04', '2000-01-22', '2000-12-19', 
       '2008-02-09', '2010-07-07', '2011-06-04', '2007-03-14', 
       '2003-05-17', '2016-02-27',..dtype='datetime64[ns]', name=u'DateTime', length=6131, freq=None) 

df2.index 
DatetimeIndex(['2002-01-01 01:00:00', '2002-01-01 10:00:00', 
       '2002-01-01 11:00:00', '2002-01-01 12:00:00', 
       '2002-01-01 13:00:00', '2002-01-01 14:00:00',..dtype='datetime64[ns]', length=129273, freq=None) 

つまり、df1のインデックスは日数で、df2のインデックスはdatetimeです。 df1のdf1とdf2の内部結合を実行し、df2の時間に対応する日付がdf1で利用可能である場合、内部結合を真であるとみなすように、インデックスに対してdf2を実行する必要があります。

私は出力として2 DF11およびDF22を取得したいです。 df11は、df1の共通の日付と対応する列を持ちます。 df22は、df2の共通の日時と対応する列を持ちます。

など。 df1の '2002-08-04'とdf2の '2002-08-04 01:00:00'は両方に存在するとみなされます。

df1の '1802-08-04'にdf2の時間がない場合、それはdf11に存在しません。

df2の '2045-08-04 01:00:00'にdf1の日付がない場合、df22には存在しません。

今私はnumpy in1dpandas normalizeの機能を使用して、このタスクを長時間実行しています。私はこれを達成するためにpythonic方法を探していました。

+0

持っているコードを投稿できますか?あなたがしようとしていることがより明らかになります。 – sangrey

答えて

2

を示すように構成されたダミーDFを考えてみましょう:

のみ日付属性として DateTimeIndexを含む
idx1 = pd.date_range(start='2000/1/1', periods=100, freq='12D') 
idx2 = pd.date_range(start='2000/1/1', periods=100, freq='300H') 
np.random.seed([42, 314]) 

DF:日付+時間属性としてDateTimeIndexを含む

df1 = pd.DataFrame(np.random.randint(0,10,(100,2)), idx1) 
df1.head() 

enter image description here

DF

df2 = pd.DataFrame(np.random.randint(0,10,(100,2)), idx2) 
df2.head() 
は区別するパラメータとしてのみ一致する日付を考慮し、共通のインデックスを取得します。

enter image description here:それの列を含む

df11 = df1.loc[intersect] 
df11 

enter image description here

第2の共通指標DFは、元のデータフレームです:

intersect = pd.Index(df2.index.date).intersection(df1.index) 

まず共通のインデックス、それの列を含むDFは、元のデータフレームです

関連する問題