我正在处理大量的财务价值数据。不幸的是,由于我是从数据库中获取数据的,因此信息的结果有点杂乱无章(许多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从可用数据的第一年开始-因此我不确定插入0并从那里进行插值的最佳实践还是可以进行反向线性插值。
此外,从AMFD示例中可以看到,有时数据会跳过几年,因此,如果我们也考虑到这一点,那就太好了。
我能想到的最接近的东西是:
df['tot_assets'] = df.groupby(['tic'])['tot_assets'].fillna(method = 'bfill')
但是,这当然不是理想的,因为它不能很好地解决我提到的问题。
此外,我还尝试使用和改编已经可用的插值文档,但是它并没有真正起作用-主要是因为我对Pandas并不十分了解。
答案 0 :(得分:0)
这是我的代码。
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