我有一个 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/