Python 如何从熊猫时间序列生成每日列表

Python 如何从熊猫时间序列生成每日列表,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个按时间索引的熊猫数据帧:(使用Python3.X) 我只需要一个列表,其中包含以小时分辨率显示的消耗值: data =[[ 38406, 36501, 35305,...], [ x, y, z,...], [ ],....[ ]] 换句话说:我需要一个每天的列表:包含24个值(一天中每小时一个值)。它们都应该放在一个列表中 所以数据[0]会给我一个包含第一天24个消费值的列表 我所做的: 一个月而不是一整年,它可能是这样的: clusterInput=[None]*31 f

我有一个按时间索引的熊猫数据帧:(使用Python3.X)

我只需要一个列表,其中包含以小时分辨率显示的消耗值:

data =[[ 38406,  36501,  35305,...], [ x, y, z,...], [  ],....[  ]]
换句话说:我需要一个每天的列表:包含24个值(一天中每小时一个值)。它们都应该放在一个列表中

所以数据[0]会给我一个包含第一天24个消费值的列表

我所做的:

一个月而不是一整年,它可能是这样的:

clusterInput=[None]*31 
for i in range(31):
  a="2012-1-"+str(i+1)
  subset=data[a]
  clusterInput[i]=subset.values 
对于全年而言,可以使用多个For-loop或switch-case语句进行类似操作,以考虑不同月份(28/29/30/31天)

但我很确定,由于时间索引,必须有一个更简单的方法。 我也尝试过使用,但没有成功

[list(x) for x in dt.T.iterrows()] /tuples and /items

我很高兴能为您提供一些如何有效执行此操作的提示

给定索引为
DatetimeIndex
的熊猫数据帧,您可以使用
groupby
方法对索引具有相同日期的所有行进行分组:

import pandas as pd
import numpy as np

dates = pd.date_range('2012-01-01', periods=24*3, freq='H')
values = np.random.randint(100, size=len(dates))
df = pd.DataFrame({'amount':values}, index=dates)

data = [grp['amount'].values.tolist() for key, grp in df.groupby([df.index.date])]
但是,如果只想将每24行分组在一起,可以使用:

这会更快,因为它不必关注索引,但它确实依赖于每天正好有24行,并且要分组的行是连续的


import pandas as pd
import numpy as np

dates = pd.date_range('2012-01-01', periods=24*3, freq='H')
values = np.random.randint(100, size=len(dates))
df = pd.DataFrame({'amount':values}, index=dates)

data = [grp['amount'].values.tolist() for key, grp in df.groupby([df.index.date])]
data = zip(*[iter(df['amount'])]*24)
In [36]: %timeit zip(*[iter(df['amount'])]*24)
100000 loops, best of 3: 15.2 µs per loop

In [37]: %timeit [grp['amount'].values.tolist() for key, grp in df.groupby([df.index.date])]
1000 loops, best of 3: 1.19 ms per loop

In [38]: 1190/15.2
Out[38]: 78.28947368421053