我在将数据帧重塑为几周时遇到了问题,这样我就可以轻松地查看一个特定的星期,但也可以将星期几聚合在一起,即周一+周一,周二+周二等。
我已经在文档中查找了一种方法,但我找不到适用于我的解决方案。我的数据分辨率为1分钟,持续时间为4个月,该系列在某些地方缺少数据。
目前我提出了类似的内容:
def week_reshaping(df):
# Define constant for offsetting the loop
offset = pd.DateOffset(days=7)
# Number of weeks within the df
weeks = (df.index[-1] - df.index[0]).days // 7
d_datetime = df.index[0]
df_week = pd.DataFrame()
for week in range(1, weeks + 1):
start = df.index.searchsorted(d_datetime)
end = df.index.searchsorted(offset + d_datetime)
# Assign this somehow
df.ix[start:end]
d_datetime += offset
return df_week
答案 0 :(得分:5)
我不完全确定你的目标是什么,但你绝对应该考虑使用groupby而不是for循环(这会更快)。
您可以按周(从DatetimeIndex)分组:
In [1]: rng = pd.date_range('2013', freq='D', periods=10)
In [2]: df = pd.DataFrame(np.random.randn(10), rng)
In [3]: df.index.week
Out[3]: array([32, 32, 32, 33, 33, 33, 33, 33, 33, 33], dtype=int32)
In [4]: df.groupby(df.index.week).sum()
Out[4]:
0
32 3.600673
33 0.791545
同样,你可以按天(一周)分组:
In [5]: df.groupby(df.index.dayofweek).sum()
Out[5]:
0
0 1.268307
1 0.387322
2 1.416948
3 -0.380844
4 1.464068
5 0.030965
6 0.205453
或更复杂的数组派生自......
我认为你可以apply
在这里使用不同的功能(而不是总和)来达到预期的效果。