按年转动熊猫时间序列

时间:2018-01-03 13:47:45

标签: python pandas

是否有更短或更优雅的方式在熊猫中按年份转动时间序列?下面的代码实现了我想要的,但我想知道是否有更好的方法来实现这一目标:

import pandas
import numpy

daterange = pandas.date_range(start='2000-01-01', end='2017-12-31', freq='10T')
# generate a fake timeseries of measured wind speeds from 2000 to 2017 in 10min intervals
wind_speed = pandas.Series(data=numpy.random.rand(daterange.size), index=daterange)
# group by year
wind_speed_groups = wind_speed.groupby(wind_speed.index.year).groups
# assemble data frame with columns of wind speed data for every year
wind_speed_pivot = pandas.DataFrame()
for key, group in wind_speed_groups.items():
    series = wind_speed[group]
    series.name = key
    series.index = series.index - pandas.Timestamp(str(key)+'-01-01')
    wind_speed_pivot = wind_speed_pivot.join(series, how='outer')
print(wind_speed_pivot)

1 个答案:

答案 0 :(得分:1)

我不确定这是否是最快的方法,因为我在初始数据帧中添加了两列(如果要覆盖它,可以只添加一列)。

import pandas as pd
import numpy as np
import datetime as dt
daterange = pd.date_range(start='2000-01-01', end='2017-12-31', freq='10T')
# generate a fake timeseries of measured wind speeds from 2000 to 2017 in 10min intervals
wind_speed = pd.Series(data=np.random.rand(daterange.size), index=daterange)

df = wind_speed.to_frame("windspeed")
df["year"] = df.index.year
df["pv_index"] = df.index - df["year"].apply(lambda x: dt.datetime(x,1,1))
wind_speed_pivot = df.pivot_table(index=["pv_index"], columns=["year"], values=["windspeed"])