gpt4 book ai didi

python - pandas Grouper 未按预期进行上采样

转载 作者:太空宇宙 更新时间:2023-11-03 20:23:20 24 4
gpt4 key购买 nike

考虑一个具有 MultiIndex 的系列,该系列在级别 0 上提供自然分组值,在级别 1 上提供时间序列:

s = pd.Series(range(12), index=pd.MultiIndex.from_product([['a','b','c'],
pd.date_range(start='2019-01-01', freq='3D', periods=4)], names=['grp','ts']))
print(s)
grp  ts
a 2019-01-01 0
2019-01-04 1
2019-01-07 2
2019-01-10 3
b 2019-01-01 4
2019-01-04 5
2019-01-07 6
2019-01-10 7
c 2019-01-01 8
2019-01-04 9
2019-01-07 10
2019-01-10 11
Length: 12, dtype: int64

我想对每个外部索引值的时间序列进行上采样,例如使用简单的前向填充操作:

s.groupby(['grp', pd.Grouper(level=1, freq='D')]).ffill()

这会产生意想不到的结果;也就是说,它不做任何事情。结果正是 s 而不是我想要的:

grp ts
a 2019-01-01 0
2019-01-02 0
2019-01-03 0
2019-01-04 1
2019-01-05 1
2019-01-06 1
2019-01-07 2
2019-01-08 2
2019-01-09 2
2019-01-10 3
b 2019-01-01 4
2019-01-02 4
2019-01-03 4
2019-01-04 5
2019-01-05 5
2019-01-06 5
2019-01-07 6
2019-01-08 6
2019-01-09 6
2019-01-10 7
c 2019-01-01 8
2019-01-02 8
2019-01-03 8
2019-01-04 9
2019-01-05 9
2019-01-06 9
2019-01-07 10
2019-01-08 10
2019-01-09 10
2019-01-10 11
Length: 30, dtype: int64

我可以更改 Grouper freq 或 resample 函数以达到相同的效果。我发现的一个解决方法是通过创造性的欺骗来强制每个组使用简单的时间序列索引(感谢艾伦提供答案 https://stackoverflow.com/a/44719843/3109201 ):

s.reset_index(level=1).groupby('grp').apply(lambda s: s.set_index('ts').resample('D').ffill())

这与我最初要求的略有不同,因为它返回一个 DataFrame:

                 0
grp ts
a 2019-01-01 0
2019-01-02 0
2019-01-03 0
2019-01-04 1
2019-01-05 1
2019-01-06 1
2019-01-07 2
2019-01-08 2
2019-01-09 2
2019-01-10 3
b 2019-01-01 4
2019-01-02 4
2019-01-03 4
2019-01-04 5
2019-01-05 5
2019-01-06 5
2019-01-07 6
2019-01-08 6
2019-01-09 6
2019-01-10 7
c 2019-01-01 8
2019-01-02 8
2019-01-03 8
2019-01-04 9
2019-01-05 9
2019-01-06 9
2019-01-07 10
2019-01-08 10
2019-01-09 10
2019-01-10 11

[30 rows x 1 columns]

我可以并且将会使用此解决方法,但我想知道为什么更简单(并且坦率地说更优雅)的方法不起作用。

最佳答案

使用series.asfreq()来满足缺失的日期。

def filldates(s_in):
s_in.reset_index(level="grp",drop=True,inplace=True)
s_in= s_in.asfreq("1D",method='ffill')
return s_in
s.groupby(level=0).apply(filldates)

关于python - pandas Grouper 未按预期进行上采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58014927/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com