Python 熊猫:第一个周期的数据帧上采样失败
我有一系列每日气象数据,我想用该日所属月份的平均值替换每个每日值。为了实现这一点,我想首先将数据帧的采样降低到月平均值,然后再次将其采样提高到日频率。所有这些都使用熊猫1.0.1 数据帧如下所示:Python 熊猫:第一个周期的数据帧上采样失败,python,pandas,dataframe,Python,Pandas,Dataframe,我有一系列每日气象数据,我想用该日所属月份的平均值替换每个每日值。为了实现这一点,我想首先将数据帧的采样降低到月平均值,然后再次将其采样提高到日频率。所有这些都使用熊猫1.0.1 数据帧如下所示: dframe = 2001-01-01 23.00000 2001-01-02 19.18034 2001-01-03 9.18034 2001-01-04 0.00000 2001-01-05 0.00000 2001-01-06 0.00000 2001-01-07 0.00000
dframe =
2001-01-01 23.00000
2001-01-02 19.18034
2001-01-03 9.18034
2001-01-04 0.00000
2001-01-05 0.00000
2001-01-06 0.00000
2001-01-07 0.00000
2001-01-08 0.00000
2001-01-09 9.18034
2001-01-10 19.18034
2001-02-01 20.18034
2001-02-02 10.18034
2001-02-03 0.00000
2001-02-04 0.00000
2001-02-05 0.00000
2001-02-06 0.00000
2001-02-07 0.00000
2001-02-08 10.18034
2001-02-09 20.18034
2001-02-10 24.00000
下采样后,情况看起来正常(值可能不匹配,这些是伪数字):
但随后的上采样并不像我希望的那样起作用:
segmented = means.resample(rule = 'D').bfill()
segmented =
2001-01-31 8.456906
2001-02-01 7.499419
2001-02-02 7.499419
2001-02-03 7.499419
2001-02-04 7.499419
... ...
第一个时期(2001年1月)没有增加抽样,而第二个时期是增加抽样
我用参数closed
和label
和loffset
以及bfill()
和ffill()
尝试了所有组合,但都没有用;有时是第一个月出错,有时是最后一个月,但总有一个月出错
非常感谢您的帮助。也许您可以使用
groupby
,每月使用一次,并且transform
如下:
segmented = dframe.groupby(pd.Grouper(level=0, freq='M')).transform('mean')
假设日期在索引中,您将拥有dframe
中的所有日期,以及与每个日期相关的当月平均值
pd.Series(
[1,2,3,4],指数=pd.日期范围('2018-01-30',期间=4,频率=D')
).resample(规则='M').transform(lambda x:x.mean())
这种方法的问题在于,当您将
表示为时,索引的范围不再包括您最初拥有的所有日期。转换(或应用)是一种很好的方法,可以使输入的行数与输入的行数相同。谢谢,这两种方法都非常有效
“您的方法存在的问题是,当您创建means时,索引的范围不再包括您最初拥有的所有日期”
我怀疑这类事情,但我不知道如何克服它
segmented = dframe.groupby(pd.Grouper(level=0, freq='M')).transform('mean')