Python 如何从熊猫时间序列生成每日列表
我有一个按时间索引的熊猫数据帧:(使用Python3.X) 我只需要一个列表,其中包含以小时分辨率显示的消耗值: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
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