我正在用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分组)估算这些缺失值提出任何建议?我将不胜感激您可以提供的任何建议。
谢谢
答案 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)
感谢您的帮助。