pandas DataFrame.resample不包括最后一行

osh3o9ms  于 2023-01-15  发布在  其他
关注(0)|答案(2)|浏览(131)

所以我想用ffill方法对数据进行降采样
我有一个数据:

2020-01-01  1.248310e+06
2021-01-01  1.259511e+06
2022-01-01  1.276312e+06
2023-01-01  1.298714e+06

输出应为:

2020-01-01  1.248310e+06
2020-02-01  1.248310e+06
2020-03-01  1.248310e+06
....        ...
2023-10-01  1.298714e+06
2023-11-01  1.298714e+06
2023-12-01  1.298714e+06

以下是我尝试的方法

down_sampling = df.resample('MS', fill_method= 'ffill')

我得到的结果是:

2020-01-01  1.248310e+06
2020-02-01  1.248310e+06
2020-03-01  1.248310e+06
....        ...
2022-11-01  1.276312e+06
2022-12-01  1.276312e+06
2023-01-01  1.298714e+06

这里的问题是2023年只有一个月。
你能提出修理的建议吗?
谢谢你。

u4vypkhs

u4vypkhs1#

你可以这样做:

index = pd.date_range('1/1/2020', periods=4, freq='YS')
series = pd.Series([1.248310e+06, 1.259511e+06, 1.276312e+06, 1.298714e+06], index=index)
series2 = pd.Series(1.298714e+06, pd.date_range('12/1/2023', periods=1))
series = series.append(series2)
down_sampling = series.resample('MS').ffill()
rbpvctlc

rbpvctlc2#

这是一个古怪但又像Python一样的解决方案:

df.append(df.iloc[[-1]].set_index(df.iloc[[-1]].index.shift(1, freq="D"))).resample("H").ffill()[:-1]

它选取最后一行(作为df:df.iloc[[-1]]),
将其指数增加一个步长(此处为1天:.index.shift(1, freq="D")),
然后重新取样:.resample("H").ffill()
并删除df([:-1])末尾的单个虚拟行
我实际上希望resampleclosed:参数完成这项工作。

相关问题