用数字索引重新采样熊猫系列

时间:2014-03-04 17:42:40

标签: python pandas

假设我有一个pandas。具有数值类型索引的系列,例如

pd.Series( [10,20], [1.1, 2.3] )

我们如何以0.1间隔重新采样以上系列?看起来像.resample func只适用于日期时间间隔?

3 个答案:

答案 0 :(得分:3)

这就是插值的名称。您可以将重新采样视为插值的特殊情况。

In [24]: new_idx = s.index + pd.Index(np.arange(1.1, 2.3, .01))

In [25]: s.reindex(new_idx).interpolate().head()
Out[25]: 
1.10    10.000000
1.11    10.083333
1.12    10.166667
1.13    10.250000
1.14    10.333333
dtype: float64

In [26]: s.reindex(new_idx).interpolate().tail()
Out[26]: 
2.26    19.666667
2.27    19.750000
2.28    19.833333
2.29    19.916667
2.30    20.000000
dtype: float64

我们需要new_idx成为原始索引和我们想要插值的值的并集,这样就不会删除原始索引。

看看插值方法:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.interpolate.html

答案 1 :(得分:0)

我不认为你可以有一个非整数索引,因为浮点比较操作。但是,使用.1,您可以执行以下操作:

  • 创建一个新的df = pd.DataFrame(index=range(100, 201)) [现在将代表.1]
  • 将值设置为100(最初为10)和200(最初为20)为1.1和2.3
  • df.fillna(method='pad', inplace=True)

另外,看起来你甚至根本不需要使用索引,你只是想要数据之间的差距...

答案 2 :(得分:0)

一种选择是使用cut来收集这些数据(比重新采样更不优雅但是这里有):

In [11]: cat, retbins = pd.cut(s.index, np.arange(1, 3, 0.1), retbins=True)

In [12]: s.index = retbins[cat.labels]

In [13]: s
Out[13]: 
1.0    10
2.2    20
dtype: int64

假设你想用how'= sum'重新取样:

In [14]: s = s.groupby(s.index).sum()

In [15]: s = s.reindex(retbins)

现在有很多NaN,你现在可以像Tom建议的那样插入:

In [16]: s.interpolate()