import pandas as pd
import numpy as np
dates = pd.date_range('20141229',periods=14, name='Day')
df = pd.DataFrame({'Sum1': [1667, 1229, 1360, 9232, 8866, 4083, 3671, 10085, 10005, 8730, 10056, 10176, 3792, 3518],
'Sum2': [91, 75, 75, 254, 239, 108, 99, 259, 395, 355, 332, 386, 96, 111],
'Sum3': [365.95, 398.97, 285.12, 992.17, 1116.57, 512.11, 504.47, 1190.96, 1753.6, 1646.25, 1344.05, 1582.67, 560.95, 736.44],
'Sum4': [5, 5, 1, 5, 8, 8, 2, 10, 12, 16, 16, 6, 6, 3]},index=dates); print(df)
生成的df
如下所示:
Sum1 Sum2 Sum3 Sum4
Day
2014-12-29 1667 91 365.95 5
2014-12-30 1229 75 398.97 5
2014-12-31 1360 75 285.12 1
2015-01-01 9232 254 992.17 5
2015-01-02 8866 239 1116.57 8
2015-01-03 4083 108 512.11 8
2015-01-04 3671 99 504.47 2
2015-01-05 10085 259 1190.96 10
2015-01-06 10005 395 1753.60 12
2015-01-07 8730 355 1646.25 16
2015-01-08 10056 332 1344.05 16
2015-01-09 10176 386 1582.67 6
2015-01-10 3792 96 560.95 6
2015-01-11 3518 111 736.44 3
假设我重新对Dataframe
进行采样,尝试将每日数据汇总为每周行:
df_resampled = df.resample('W', how='sum', label='left'); print(df_resampled)
这将产生以下结果:
Sum1 Sum2 Sum3 Sum4
Day
2014-12-28 30108 941 4175.36 34
2015-01-04 56362 1934 8814.92 69
问题1我对一周的定义是周一到周日。由于我的数据开始于2014-12-29
(星期一),我希望我的Day
label
也开始于那一天。我如何使Day
index
label
成为每个星期一而不是每个星期天的日期?
期望输出:
Sum1 Sum2 Sum3 Sum4
Day
2014-12-29 30108 941 4175.36 34
2015-01-05 56362 1934 8814.92 69
关于问题1,我试过什么?
我把'W'
改为'W-MON'
,但它通过计算2014-12-22
行中的2014-12-29
产生了3行,这不是我想要的:
Sum1 Sum2 Sum3 Sum4
Day
2014-12-22 1667 91 365.95 5
2014-12-29 38526 1109 5000.37 39
2015-01-05 46277 1675 7623.96 59
问题2:如何将Day
index
标签格式化为范围?例如:
Sum1 Sum2 Sum3 Sum4
Day
2014-12-29 - 2015-01-04 30108 941 4175.36 34
2015-01-05 - 2015-01-11 56362 1934 8814.92 69
这可能会有帮助。
如果其他人不知道,那么每周的Anchored Offsets是基于结束日期的。因此,仅重新采样“W”(与“W-SUN”相同)默认为周一到周日的样本。列出的日期是结束日期。请看这个old bug report,文档和API都没有更新。
假设您在resample parameters中指定了
label='left'
,那么您一定已经意识到这一事实。这也是为什么使用“W-MON”没有达到预期效果的原因。令人困惑的是,左边界实际上不在区间内。因此,要显示期间的开始日期而不是结束日期,可以在索引中添加一天。这意味着你会:
为了完整起见,这里是您的原始数据,在开始时添加了另一天(星期天),以显示分组实际上是从星期一到星期天:
这将输出:
我相信这就是你第一个问题想要的。
更新
现在,^{} 有一个
loffset
参数,允许您移动标签偏移量。因此,不必修改索引,只需像这样添加loffset
参数:另一个值得注意的是,
how=sum
现在被弃用,取而代之的是在.resample()
返回的重采样器对象上使用.sum()
。因此,完全更新的调用将是:相关问题 更多 >
编程相关推荐