2016-11-30 9 views
1

日付の列を持つ複数のデータフレームがあります。これらのデータフレームを日付の列で5日間グループ化する必要があります。通常、このようなものは動作します:私はpd.TimeGrouperを使用する場合パンダは日付範囲を削除またはグループ化します

df = pd.DataFrame([['2016-11-01 09:21:07', 10], ['2016-09-14 02:46:01', 21], ['2016-08-11 03:26:33', 14], ['2016-10-17 14:20:44', 14]], 
       columns=['DateCol', 'Values']) 
df['DateCol'] = pd.to_datetime(df['DateCol']) 

df.set_index('DateCol').groupby(pd.TimeGrouper('5D')).mean() 

はしかし、それは私がそれを適用するデータフレームに基づいてグループを作成します。 2つの異なるデータフレームでこれを行うと、異なるグループが生成されます。 複数のデータフレームを同じグループでグループ化する必要があります。

pd.cutを使用しようとしましたが、datetime列では機能しません。 pd.cut(df['DateCol'], 10)は私にTypeErrorを与えます。

は、理想的には私はこのような何かをしたい:

pd.groupby(df, pd.cut(df['DateCol'], pd.date_range(start='1/1/2016', end='1/1/2017', freq='5D'))) 

言い換えれば、私は特定の日付範囲での私のデータフレームをGROUPBYする必要があります。

答えて

1

基本的に、すべてのデータフレームを同じ日付のセットにする必要があります。したがって、すべての列を保持するために、日付の明確なデータフレーム上で外側のマージを検討してください。外部結合は、値を左右の結合で保持し、現在のデータフレームにない対応する日付の場合はNaNとなります。次に、TimeGrouperを実行します。

以下

は上のフルオペレーションを実行する方が簡単ですし、地球環境の中で複数のオブジェクトを回避リストにすべてのデータフレームを保存します。

from datetime import datetime as dt 
import pandas as pd 

df1 = pd.DataFrame({'DateCol': [dt.strptime(i, '%Y-%m-%d %H:%M:%S') for i in 
           ['2016-11-01 09:21:07', '2016-09-14 02:46:01', 
           '2016-08-11 03:26:33', '2016-10-17 14:20:44']], 
        'Values': [10, 21, 14, 14]}) 

df2 = pd.DataFrame({'DateCol': [dt.strptime(i, '%Y-%m-%d %H:%M:%S') for i in 
           ['2016-07-28 13:56:19', '2016-03-07 06:23:48', 
           '2016-09-26 05:31:10', '2016-08-03 12:02:59']], 
        'Values': [7, 19, 28, 36]})  
dfs = [df1, df2] 
alldates = pd.concat([i[['DateCol']] for i in dfs]).drop_duplicates() 

for i in range(len(dfs)): 
    dfs[i] = dfs[i].merge(alldates, on='DateCol', how='outer')  
    dfs[i] = dfs[i].set_index('DateCol').groupby(pd.TimeGrouper('5D')).mean() 
    print(dfs[i].head()) 

#      Values 
# DateCol      
# 2016-03-07 06:23:48  NaN 
# 2016-03-12 06:23:48  NaN 
# 2016-03-17 06:23:48  NaN 
# 2016-03-22 06:23:48  NaN 
# 2016-03-27 06:23:48  NaN 
#      Values 
# DateCol      
# 2016-03-07 06:23:48 19.0 
# 2016-03-12 06:23:48  NaN 
# 2016-03-17 06:23:48  NaN 
# 2016-03-22 06:23:48  NaN 
# 2016-03-27 06:23:48  NaN 
関連する問題