2016-07-15 8 views
1

タイムウィンドウ内でtimeseries(時間と温度下の温度値)から値をビンしようとしています。 つまり、元の時間単位の値から、日単位、週単位または月単位でビニングされた値を抽出したいと思います。 groupby + TimeGrouper(" ")pd.cutを組み合わせようとしましたが、結果が悪いです。ビンによるデータの二重グループ化とパンダとの時間

私はこのtutorialから、(各値を次の列のマッピングされた範囲に関連付ける)データをマップし、それに従ってグループ化することを提案しました。

def map_bin(x, bins): 
    kwargs = {} 
    if x == max(bins): 
     kwargs['right'] = True 
    bin = bins[np.digitize([x], bins, **kwargs)[0]] 
    bin_lower = bins[np.digitize([x], bins, **kwargs)[0]-1] 
    return '[{0}-{1}]'.format(bin_lower, bin) 

df['Binned'] = df['temp'].apply(map_bin, bins=freq_bins) 

ただし、はIndexErrorこの関数の結果を適用する:インデックスNサイズNと軸0の境界の外にあります。

理想的には、この作業を行い、同時に2つのグループ化を実現することができます:1つはビンで、もう1つはタイムグルーパです。

答えて

2

更新:
私の以前の試みがあるため2重インデックス列の問題を引き起こしていたことが表示されます。私はもっ​​とうまくいくと思われるものに簡略化しました。

import pandas as pd 
import numpy as np 
xaxis = np.linspace(0,50) 
temps = pd.Series(data=xaxis,name='temps') 
times = pd.date_range(start='2015-07-15',periods=50,freq='6H') 
temps.index = times 

bins = [0,10,20,30,40,50] 

temps.resample('W').agg(lambda series:pd.value_counts(pd.cut(series,bins),sort=False)).unstack() 

この出力:

  (0, 10] (10, 20] (20, 30] (30, 40] (40, 50] 
2015-07-19  9  10   0   0   0 
2015-07-26  0   0   10   10   8 
2015-08-02  0   0   0   0   2 
+0

アルトン、私は私が正しく理解していれば、あなたはそれからすべての測定をしたいので、同時に – Andreuccio

+0

で、ビンで日/週で、両方のグループたいです時間を平均化し、それを日、週、月ごとにグループ分けします。 –

+1

ハ、それはあまりにも簡単だろう! 1時間ごとに室温を記録するセンサが1つあります(実際には10分15秒ですが、パンダでリサンプリングしました)。 私のdfは非常に単純です:最初の列:タイムスタンプ(インデックス付き)、2番目の列:温度 私のビンが[20,22,24,26,28,30]だった場合は、どのように多くのデータポイント(すなわち、どのように多くの時間温度値)が20日<22日であるか、毎日22日<24日間、および毎週どれくらいであるかを知る方法です。 それは意味がありますか? – Andreuccio

関連する問題