2017-01-25 9 views
1

pandas Dataframesの再サンプリング方法に関する質問があります。 は、私は一日一の観察とデータフレームを持っている:pandas特定の日付のデータフレームを再サンプリングする

import pandas as pd 
import numpy as np 

df = pd.DataFrame(np.random.randint(0,100,size=(366, 1)), columns=list('A')) 
df.index = pd.date_range(datetime.date(2016,1,1),datetime.date(2016,12,31)) 

私は毎月のための和(または他の)を計算したい場合は、私が直接行うことができます。

EOM_sum = df.resample(rule="M").sum() 

しかし、私は特定のを持っていますカレンダー(不規則な周波数):私は、各期間の合計を計算する場合

import datetime 
custom_dates = pd.DatetimeIndex([datetime.date(2016,1,13), 
          datetime.date(2016,2,8), 
          datetime.date(2016,3,16), 
          datetime.date(2016,4,10), 
          datetime.date(2016,5,13), 
          datetime.date(2016,6,17), 
          datetime.date(2016,7,12), 
          datetime.date(2016,8,11), 
          datetime.date(2016,9,10), 
          datetime.date(2016,10,9), 
          datetime.date(2016,11,14), 
          datetime.date(2016,12,19), 
          datetime.date(2016,12,31)]) 

は、私は現在、各列が属する期間の終わり、およびpとdfをするための一時的な列を追加しますグループで操作を実行してください:

df["period"] = custom_dates[custom_dates.searchsorted(df.index)] 
custom_sum = df.groupby(by=['period']).sum() 

しかし、これはかなり汚れていて、pythonicに見えません。パンダでこれを行う組み込みメソッドはありますか? ありがとうございます。 lenghtdfのようlengthが同じであるため、NWの列を作成する

+0

新しい列は必要ではありません.'custom_sum = df.groupby(custom_dates [custom_dates.searchsorted(df.index)])。sum() ' – jezrael

+0

パンダのリサンプリング方法は、ある種の使用したメソッドは正しいアプローチです。追加された列をスキップしたことについての上記の@jezraelの回答を参照してください。 – James

+0

「resample」メソッドに非常に近いので、Pandasには何もありません。 – JMat

答えて

0

は、次のことができgroupbyDatatimeIndexにより、必要ありません。

import pandas as pd 
import numpy as np 

np.random.seed(100) 
df = pd.DataFrame(np.random.randint(0,100,size=(366, 1)), columns=list('A')) 
df.index = pd.date_range(datetime.date(2016,1,1),datetime.date(2016,12,31)) 
print (df.head()) 
      A 
2016-01-01 8 
2016-01-02 24 
2016-01-03 67 
2016-01-04 87 
2016-01-05 79 

import datetime 
custom_dates = pd.DatetimeIndex([datetime.date(2016,1,13), 
          datetime.date(2016,2,8), 
          datetime.date(2016,3,16), 
          datetime.date(2016,4,10), 
          datetime.date(2016,5,13), 
          datetime.date(2016,6,17), 
          datetime.date(2016,7,12), 
          datetime.date(2016,8,11), 
          datetime.date(2016,9,10), 
          datetime.date(2016,10,9), 
          datetime.date(2016,11,14), 
          datetime.date(2016,12,19), 
          datetime.date(2016,12,31)]) 
custom_sum = df.groupby(custom_dates[custom_dates.searchsorted(df.index)]).sum() 
print (custom_sum) 
       A 
2016-01-13 784 
2016-02-08 1020 
2016-03-16 1893 
2016-04-10 1242 
2016-05-13 1491 
2016-06-17 1851 
2016-07-12 1319 
2016-08-11 1348 
2016-09-10 1616 
2016-10-09 1523 
2016-11-14 1793 
2016-12-19 1547 
2016-12-31 664 

別の解決策は、新しいindexcustom_datesでの追加で、groupby使用numpy arraysearchsortedからの出力として:

print (custom_dates.searchsorted(df.index)) 
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 
    1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 
    2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 
    2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 
    3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 
    4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 
    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 
    6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 
    7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 
    8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 
    8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 
    9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 
10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 11 11 11 11 11 11 
11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 
11 11 11 11 12 12 12 12 12 12 12 12 12 12 12 12] 

custom_sum = df.groupby(custom_dates.searchsorted(df.index)).sum() 
custom_sum.index = custom_dates 
print (custom_sum) 
       A 
2016-01-13 784 
2016-02-08 1020 
2016-03-16 1893 
2016-04-10 1242 
2016-05-13 1491 
2016-06-17 1851 
2016-07-12 1319 
2016-08-11 1348 
2016-09-10 1616 
2016-10-09 1523 
2016-11-14 1793 
2016-12-19 1547 
2016-12-31 664 
関連する問題