2017-03-06 29 views
3

我正在研究一个月需要每小时数据并将其分组为24小时总和的代码。我的问题是,我希望索引读取日期/年份,我只是得到1-30的索引。熊猫集团每小时的数据转化为日期索引的每日汇总

我使用的代码是输出的

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

比如我得到的输出

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

的例子,我想

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条款:

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

甚至更​​好:

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

第二个正是我所需要的。谢谢。 – acb

+0

为了记录,我建议您将'groupby'标记设置为'%Y%m%d',因为这样可以更容易地获取按日期排序的元素(如果您需要的话)。 –

0

您可以利用熊猫的DatetimeIndex

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

这如果你的DateTime列实际上是DateTime(并且要小心时区)。

通过这种方式,您将在索引中拥有有效的日期时间,以便您可以轻松地进行其他操作。

1

如果您的索引不是日期时间对象。

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() 

将导致

  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 
相关问题