9

15秒間隔の時系列データで構成されるデータフレームがあります。

date_time             value    
2012-12-28 11:11:00   103.2
2012-12-28 11:11:15   103.1
2012-12-28 11:11:30   103.4
2012-12-28 11:11:45   103.5
2012-12-28 11:12:00   103.3

データは何年にもわたっています。年と時間の両方でグループ化して、長年にわたる時刻効果の分布を調べたいと思います。たとえば、15秒間隔ごとの日ごとの平均と標準偏差を計算し、平均と標準偏差が2010、2011、2012などからどのように変化するかを確認したい場合があります。単純に試しdata.groupby(lambda x: [x.year, x.time])ましたが、機能しませんでした。 。どうすればそのようなグループ化を行うことができますか?

4

2 に答える 2

16

date_timeがインデックスではない場合、インデックス付きのdate_timeDataFrameは次のコマンドで作成できます。

dfts = df.set_index('date_time')

そこから、を使用して間隔でグループ化できます

dfts.groupby(lambda x : x.month).mean()

各月の平均値を確認します。同様に、あなたはすることができます

dfts.groupby(lambda x : x.year).std()

年間の標準偏差。

達成したいタスクの例を理解した場合は、を使用してデータを年に分割しxs、それらをグループ化して結果を連結し、これを新しいに格納することができますDataFrame

years = range(2012, 2015)
yearly_month_stats = [dfts.xs(str(year)).groupby(lambda x : x.month).mean() for year in years]
df2 = pd.concat(yearly_month_stats, axis=1, keys = years)

そこからあなたは次のようなものを手に入れます

        2012       2013       2014
       value      value      value
1        NaN   5.324165  15.747767
2        NaN -23.193429   9.193217
3        NaN -14.144287  23.896030
4        NaN -21.877975  16.310195
5        NaN  -3.079910  -6.093905
6        NaN  -2.106847 -23.253183
7        NaN  10.644636   6.542562
8        NaN  -9.763087  14.335956
9        NaN  -3.529646   2.607973
10       NaN -18.633832   0.083575
11       NaN  10.297902  14.059286
12  33.95442  13.692435  22.293245
于 2013-01-13T17:52:51.730 に答える
4

あなたは近かった:

data.groupby([lambda x: x.year, lambda x: x.time])

また、 kermit666の回答のように、必ずdate_timeインデックスとして設定してください。

于 2013-06-14T14:31:24.347 に答える