2017-03-06 25 views
3

1時間のデータを取り、それを24時間の合計にグループ化するコードを作成しています。私の問題は、インデックスに日付/年を読んでほしいということです。私はちょうど1-30のインデックスを取得しています。Pandasグループの1時間ごとのデータを日付インデックス付きの日々の合計に換算する

私が使用していたコードは、私は、出力の

DateTime  data 
1   1772.031568 
2   19884.42243 
3   28696.72159 
4   24906.20355 
5   9059.120325 

例を取得しています出力の

df = df.iloc[:,16:27].groupby([lambda x: x.day]).sum() 

の例では、私が希望です

DateTime  data 
1/1/2017  1772.031568 
1/2/2017  19884.42243 
1/3/2017  28696.72159 
1/4/2017  24906.20355 
1/5/2017  9059.120325 

答えて

2

あなたのインデックスがdatetimeある場合は、組み合わせgroupby句構築することができます:あなたがパンダのDatetimeIndexを利用することができます

df = df.iloc[:,16:27].groupby([lambda x: x.strftime("%d%m%Y")]).sum() 
+0

2番目のものは私が必要とするものです。ありがとうございました。 – acb

+0

レコードのために、 'groupby'トークンを'%Y%m%d'に設定することをお勧めします。そうすることで、日付順の要素を取得する方が簡単です(必要な場合)。 –

0

working_df=df.iloc[:, 16:27] 
result = working_df.groupby(pd.DatetimeIndex(working_df.DateTime)).date).sum() 

この場合

df = df.iloc[:,16:27].groupby([lambda x: "{}/{}/{}".format(x.day, x.month, x.year)]).sum() 

またはより良いがDateTime列は実際にはDateTimeです(タイムゾーンに注意してください)。

この方法では、他の操作を簡単に行うことができるように、インデックスに有効なdatetimeがあります。

1

インデックスがdatetimeオブジェクトでない場合。

import pandas as pd 
df = pd.DataFrame({'data': [1772.031568, 19884.42243,28696.72159, 24906.20355,9059.120325]},index=[1,2,3,4,5]) 
print df.head() 
rng = pd.date_range('1/1/2017',periods =len(df.index), freq='D') 
df.set_index(rng,inplace=True) 
print df.head() 

はあなたが効率的に小片に日時を破る機能(日時の年と月のようなを露出させるために、あなたのdatetime型の列に索引を作成する必要が

  data 
1 1772.031568 
2 19884.422430 
3 28696.721590 
4 24906.203550 
5 9059.120325 
        data 
2017-01-01 1772.031568 
2017-01-02 19884.422430 
2017-01-03 28696.721590 
2017-01-04 24906.203550 
2017-01-05 9059.120325 
1

まずになります)。

次に、年の各日に集計メソッド(sum()など)を適用し、毎日別の集計を保持する場合は、インデックスの年月日をグループ化する必要があります。

reset_index()およびrename()の機能を使用すると、group_byカテゴリの名前を元の名前に変更できます。これにより、データが「平坦化」され、結果のデータフレーム上の実際の列になります。

import pandas as pd 

date_index = pd.DatetimeIndex(df.created_at) 
# 'df.created_at' is the datetime column in your dataframe 
counted = df.group_by([date_index.year, date_index.month, date_index.day])\ 
      .agg({'column_to_sum': 'sum'})\ 
      .reset_index()\ 
      .rename(columns={'level_1': 'year', 
          'level_2': 'month', 
          'level_3': 'day'}) 

# Resulting dataframe has columns "column_to_sum", "year", "month", "day" available 
関連する問題