pandas 重新索引和插值数据

lf3rwulv  于 2022-11-20  发布在  其他
关注(0)|答案(1)|浏览(211)

假设我有下面的 Dataframe 。

index = [0.018519,  0.037037,   0.055556,   0.074074,   0.092593,   0.111111,   0.12963,    0.148148,   0.166667,   0.185185,
     0.203704,  0.222222,   0.240741,   0.259259,   0.277778,   0.296296,   0.314815,   0.333333,   0.351852,   0.37037,
     0.388889,  0.407407,   0.425926,   0.444444,   0.462963,   0.481481,   0.5,    0.518519,   0.537037,   0.555556,   0.574074,
     0.592593,  0.611111,   0.62963,    0.648148,   0.666667,   0.685185,   0.703704,   0.722222,   0.740741,   0.759259,   0.777778,
     0.796296,  0.814815,   0.833333,   0.851852,   0.87037,    0.888889,   0.907407,   0.925926,   0.944444,   0.962963,   0.981481,   1]
y = [1.5,   2,  6,  23.5,   112,    158.5,  226,    332,    354.5,  376.5,  420.5,  479.5,  513,    513.5,  515.5,  516,    519.5,  523,
 525.5, 527.5,  531,    536,    541,    542,    542,    545.5,  547,    553,    553.5,  555,    555.5,  555.5,  555.5,  556,    556.5,  557,
 561,   564.5,  571,    586,    589.5,  589.5,  590,    590.5,  591.5,  592,    592.5,  592.5,  594,    595.5,  604.5,  606,    608,    608.5]

df = pd.DataFrame(y, index=index).astype(float)

我想重新建立索引,并根据新索引插入y值。我尝试了以下方法:

new_index= pd.Index([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1])
df= df.reindex(new_index).interpolate(method='values')
print (df)

它成功地重新索引 Dataframe ,但仍给予NaN值。

print (df)
0.1    NaN
0.2    NaN
0.3    NaN
0.4    NaN
0.5  547.0
0.6  559.3
0.7  571.6
0.8  583.9
0.9  596.2
1.0  608.5

注意,所有的插值方法都不起作用,有人知道如何为新索引获得插值y值吗?
谢谢

piah890a

piah890a1#

以下是一种方法:

# Add new values
df = pd.concat(
    [df, pd.DataFrame(data=[pd.NA for _ in range(len(new_index))], index=new_index)]
)

# Remove duplicated indices, sort, interpolate and get rid of values not in new_index
df = (
    df.loc[~df.index.duplicated(keep="first"), :]
    .sort_index()
    .interpolate(method="values")
    .reindex(new_index)
)

然后道:

print(df)
# Output
0.1  130.599498
0.2  411.699525
0.3  516.700038
0.4  534.000054
0.5  547.000000
0.6  555.500000
0.7  563.799962
0.8  590.100005
0.9  593.400016
1.0  608.500000

相关问题