pandas - 为 pandas DataFrame 设置新索引(插值?)

标签 pandas numpy interpolation

我有一个 DataFrame,其中索引不是时间。我需要将所有值从不等间距的旧索引重新调整为具有不同限制且等间距的新索引。

列中的第一个和最后一个值应保持原样(尽管它们将分配有新的、延伸的索引值)。

示例代码是:

import numpy as np
import pandas as pd
%matplotlib inline

index = np.asarray((2, 2.5, 3, 6, 7, 12, 15, 18, 20, 27))
x = np.sin(index / 10)

df = pd.DataFrame(x, index=index)
df.plot();

newindex = np.linspace(0, 29, 100)

如何创建索引为 newindex 且新 x 值是从旧 x 值插入的 DataFrame?

第一个新的 x 值应与第一个旧的 x 值相同。最后一个 x 值也是如此。也就是说,开头不应有 NaN,末尾不应重复最后一个旧 x 的副本。

其他的应该进行插值以适应新的等间距索引。

我尝试了 df.interpolate() 但无法弄清楚如何针对 newindex 进行插值。

预先感谢您的帮助。

最佳答案

这很有效:

import numpy as np
import pandas as pd

def interp(df, new_index):
    """Return a new DataFrame with all columns values interpolated
    to the new_index values."""
    df_out = pd.DataFrame(index=new_index)
    df_out.index.name = df.index.name

    for colname, col in df.iteritems():
        df_out[colname] = np.interp(new_index, df.index, col)

    return df_out

关于pandas - 为 pandas DataFrame 设置新索引(插值?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48068938/

相关文章:

python - 获取关系之间的差异

python - 在 Pandas 中查询满足一组条件的最近对象(及时)

python - 计算协方差矩阵——numpy.cov 和 numpy.dot 之间的区别?

python - 在 scipy.interpolate.griddata 和 method=nearest 的边界外使用 fill_value

python - 选择 pandas 数据框中的前 n 组

python - pandas groupby agg 从一列中获取最大值并从另一列中获取值

python - NumPy 中的一维数组

python - numpy.array_split() 奇怪的行为

bash - 数据无效的线性插值

c++ - 比 if else if else... 更好的方法用于线性插值