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
,但我正在尝试按时间段进行此操作。答案 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)