通过多个组估算缺失值

时间:2020-04-28 00:47:03

标签: python pandas

我正在用Python合并不同公司的月度数据和季度财务数据。每只股票的某些列都有每月数据,而另一些则只有季度数据。下面是一个示例数据框。

import numpy as np
import pandas as pd 
raw_data = {'gvkey': [1004, 1004, 1004, 1004, 1004, 1004, 1045, 1045, 1045, 1045, 1045, 1045,], 
        'date': ['2018-08-31', '2018-09-30', '2018-10-31', '2018-11-30', '2018-12-31', '2019-01-31', '2018-08-31', '2018-09-30', '2018-10-31', '2018-11-30', '2018-12-31', '2019-01-31'], 
        'trt1m': [-1.5609, 2.6141, -0.4907, -8.1757, -14.5342, 1.1114, -0.2488, -14.939, 5.6241, 8.5137, 2.3091, -7.335], 
        'epsfxq': [np.NaN, 0.52, np.NaN, np.NaN,  .54, np.NaN, np.NaN, -.28, np.NaN, np.NaN, -3.29, np.NaN],
        'roa': [0.079, 0.079, 0.079, 0.082, 0.082, 0.082, .104, .104, .104, .090, .090, .090]}

df = pd.DataFrame(raw_data, columns = ['gvkey', 'date', 'trt1m', 'epsfxq', 'roa'])
df.head(12)

我正在尝试为数据框中的NaN值估算缺少的数据,但是,当我按日期或gvkey(读取:StockID)分组时,我可以进行正向填充(ffill)或向后填充成功填充(填充)到缺少的值,但是这样做会丢失日期和gvkey列。

是否有人对如何为多个组(在此示例中按日期和gvkey分组)估算这些缺失值提出任何建议?我将不胜感激您可以提供的任何建议。

谢谢

2 个答案:

答案 0 :(得分:0)

df.fillna(method='ffill')应该可以解决问题,无需分组。

添加 要解决OP的担忧:

ll=[]
for i, j in df.groupby(gvkey):
   ll.append(j.fillna(method='ffill')
newdf = pd.concat(ll)

答案 1 :(得分:0)

这有效:

fill_cols = ['epsfxq']
df[fill_cols] = df.groupby(['gvkey'])[fill_cols].ffill()
df[fill_cols] = df.groupby(['gvkey'])[fill_cols].bfill()
df.head(12)

感谢您的帮助。