【问题标题】:Using pandas.DataFrame.interpolate to add rows to DataFrame使用 pandas.DataFrame.interpolate 向 DataFrame 添加行
【发布时间】:2017-01-25 23:02:40
【问题描述】:

我有一个格式如下的 Pandas 数据框:

    Frequency | Value
1   10          2.8
2   20          2.5
3   30          2.2
4   40          2.3

我想使用 pandas.DataFrame.interpolate 在频率 35 处添加一条线,其值在频率 30 和 40 之间线性插值。

在用户手册中,示例显示了如何替换 Nan,但不显示如何在其他之间添加值 (Pandas doc)。

最好的方法是什么?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我认为您需要首先将新值 35 添加到 frequencylocsort_values 然后 interpolate

    df.loc[-1, 'Frequency'] = 35
    df = df.sort_values('Frequency').reset_index(drop=True)
    print (df)
       Frequency  Value
    0       10.0    2.8
    1       20.0    2.5
    2       30.0    2.2
    3       35.0    NaN
    4       40.0    2.3
    
    df = df.interpolate()
    print (df)
       Frequency  Value
    0       10.0   2.80
    1       20.0   2.50
    2       30.0   2.20
    3       35.0   2.25
    4       40.0   2.30
    

    Series 的解决方案,谢谢Rutger Kassies 的想法。

    DataFrame.squeeze 创建Series 一列DataFrame

    s = df.set_index('Frequency').squeeze()
    s.loc[35] = np.nan
    s = s.sort_index().interpolate(method='index')
    print (s)
    Frequency
    10    2.80
    20    2.50
    30    2.20
    35    2.25
    40    2.30
    Name: Value, dtype: float64
    

    【讨论】:

    • 如果频率不规则,设置为索引并使用df.interpolate(method='index')会考虑实际频率。
    • @RutgerKassies - 是的,我将它添加到解决方案中。
    猜你喜欢
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 2023-03-17
    • 2018-08-20
    • 2017-04-18
    • 2018-09-24
    相关资源
    最近更新 更多