ElR*_*udi 5 python datetime pandas pandas-resample
我想将pandas.Series每小时DatetimeIndex到每月的值聚合起来 - 同时考虑到午夜的偏移。
考虑以下跨度约为 1.5 个月的(统一)时间序列。
import pandas as pd
hours = pd.Series(1, pd.date_range('2020-02-23 06:00', freq = 'H', periods=1008))
hours
# 2020-02-23 06:00:00 1
# 2020-02-23 07:00:00 1
# ..
# 2020-04-05 04:00:00 1
# 2020-04-05 05:00:00 1
# Freq: H, Length: 1000, dtype: int64
Run Code Online (Sandbox Code Playgroud)
我想将这些总结为几个月,同时考虑到在此用例中这些日子从 06:00 开始。结果应该是:
2020-02-01 06:00:00 168
2020-03-01 06:00:00 744
2020-04-01 06:00:00 96
freq: MS, dtype: int64
Run Code Online (Sandbox Code Playgroud)
我怎么做??
我可以在考虑偏移量的同时使用以下offset参数聚合到天数:
2020-02-01 06:00:00 168
2020-03-01 06:00:00 744
2020-04-01 06:00:00 96
freq: MS, dtype: int64
Run Code Online (Sandbox Code Playgroud)
使用相同的方法聚合到月份是行不通的。时间戳没有时间部分,并且值不正确:
days = hours.resample('D', offset=pd.Timedelta('06:00:00')).sum()
days
# 2020-02-23 06:00:00 24
# 2020-02-24 06:00:00 24
# ..
# 2020-04-03 06:00:00 24
# 2020-04-04 06:00:00 24
# Freq: D, dtype: int64
Run Code Online (Sandbox Code Playgroud)
我可以在聚合数天后将聚合数月作为第二步。在这种情况下,值是正确的,但时间戳中仍然缺少时间部分:
months = hours.resample('MS', offset=pd.Timedelta('06:00:00')).sum()
months
# 2020-02-01 162 # wrong
# 2020-03-01 744
# 2020-04-01 102 # wrong
# Freq: MS, dtype: int64
Run Code Online (Sandbox Code Playgroud)
我当前的解决方法是添加时间增量并手动重置频率。
days = hours.resample('D', offset=pd.Timedelta('06:00:00')).sum()
months = days.resample('MS', offset=pd.Timedelta('06:00:00')).sum()
months
# 2020-02-01 168
# 2020-03-01 744
# 2020-04-01 96
# Freq: MS, dtype: int64
Run Code Online (Sandbox Code Playgroud)
对您的尝试没有太大改进,但您可以将重采样编写为
months = hours.resample('D', offset='06:00:00').sum().resample('MS').sum()
Run Code Online (Sandbox Code Playgroud)
更改索引标签仍然需要您一直在做的黑客操作,例如手动添加时间增量并设置freq为MS
请注意,您可以将时间增量的字符串表示形式传递给偏移量。
需要两次重采样操作的原因是因为当重采样频率大于“D”时,偏移被忽略。使用偏移量执行每日级别的重新采样后,可以在不指定偏移量的情况下进一步对结果进行重新采样。
我相信这是错误的行为,我同意你的观点,这hours.resample('MS', offset='06:00:00').sum()应该会产生预期的结果。
本质上,有两个问题:
存在影响偏移重采样的相关错误问题。 我尚未确定这与您面临的问题是否具有相同的根本原因。其根本原因相同。
| 归档时间: |
|
| 查看次数: |
782 次 |
| 最近记录: |