使用种类参数按PeriodIndex重新采样()

时间:2019-03-21 19:24:30

标签: pandas

resample() documentation表示存在一个kind参数,该参数允许一个PeriodIndex重采样。这是否意味着我可以仅根据一个月进行重新采样?

示例

假设我有一个系列df

period
1    1.0
2    2.0
4    4.0
5    5.0
6    6.0

我应该能够使用类似于以下代码的方式重新采样:

df.resample('M', kind='period').first().fillna(0)

获得:

period
1    1.0
2    2.0
3    0.0
4    4.0
5    5.0
6    6.0

其他复杂性

如果df是:

period
6    6.0

我可以编写我的resample()代码以获取:

period
1    0.0
2    0.0
3    0.0
4    0.0
5    0.0
6    6.0

注释:

  • 我编写的代码不起作用,但是我认为这是因为我对resample()PeriodIndex的假设是错误的。
  • 所有期间都在同一年,因此从理论上讲,我可以制作一个datetime,但我正在尝试按时间段进行此操作。

1 个答案:

答案 0 :(得分:1)

问题中描述的DataFrame似乎没有PeriodIndex。因此,看来您希望通过PeriodIndex将其转换为.resample(kind=)

您将得到AttributeError: 'Int64Index' object has no attribute 'freq',因为重采样器正在寻找索引类型,该索引类型具有问题中显示的序数索引所不具有的频率。

这是一个完全有效的示例,概述了.resample()在使用PeriodIndex时的一般功能。

一旦您的DataFrame具有适当的索引类型,通常就不必担心该类型。框架通常处理该部分。因此,在下面,您可以看到简单地传递了重采样频率。

DataFrame.resample()不会创建不存在的用于重采样的内容。一个小技巧是在您希望重新采样开始的地方插入一个索引。

import pandas as pd
import numpy as np
print (pd.__version__)

pidx = pd.period_range(start='2019-01-01', end='2019-06-01', freq='M')

df = pd.DataFrame(index=pidx,data={'period':[1.0,2.0,3.0,4.0,5.0,6.0]})

# knock out 2019-03
df = df.drop(df.index[2])

df = df.resample('M').first().fillna(0)
print(df)

# knock out preceding periods
df = df.drop(df.index[:-1])

df = df.resample('M').first().fillna(0)
print(df)

# preceding period to reconstitute resamples
df.loc[pidx[0]] = np.nan
df = df.resample('M').first().fillna(0)
print(df)