【问题标题】:Pandas Panel data - Linear interpolation of values based on rulesPandas 面板数据 - 基于规则的值的线性插值
【发布时间】:2020-04-13 10:26:30
【问题描述】:

我正在处理财务价值的大型面板数据。不幸的是,当我从数据库中获取数据时,信息结果有点参差不齐(很多 NaN 值)。我想做的是通过线性插值来填充缺失值。

df 看起来是这样的(仅以两家公司为例):

         year     ticker     tot_assets 
0        2001      ANTQ             NaN
1        2002      ANTQ             NaN
2        2003      ANTQ           14.56
3        2004      ANTQ           14.99
4        2005      ANTQ             NaN
5        1999      AMFD            2.44
6        2000      AMFD             NaN
7        2001      AMFD            1.89
8        2002      AMFD             NaN
9        2004      AMFD            3.78
10       2005      AMFD            3.82
..       ...        ...             ...

正如您从示例中看到的那样,有时 NaN 从可用数据的第一年开始 - 所以我不确定插入零并从那里插值的最佳做法是否可以进行反向线性插值。

此外,正如您从 AMFD 示例中看到的那样,有时数据会跳过几年,所以如果我们也能考虑到这一点会很好。

我能想到的最接近的事情是:

df['tot_assets'] = df.groupby(['tic'])['tot_assets'].fillna(method = 'bfill')

但这当然并不理想,因为它并不能真正很好地处理我提到的问题。

此外,我还尝试使用和调整现有的插值文档,但它并没有真正起作用 - 主要是因为我对 Pandas 没有超级经验。

【问题讨论】:

    标签: python pandas numpy finance panel-data


    【解决方案1】:

    这是我的代码。

    for i in range(1, len(df)):
    if (df.loc[i, 'ticker']==df.loc[i-1, 'ticker']) & (df.loc[i, 'fyear']==df.loc[i-1, 'fyear']+1):
        df.loc[i, 'tot_a_1'] = df.loc[i-1, 'tot_a']
    else:
        df.loc[i, 'tot_a_1'] = None
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      相关资源
      最近更新 更多