【问题标题】:Imputing Missing Values with Multiple Groups用多个组插补缺失值
【发布时间】:2020-04-28 23:40:55
【问题描述】:

我正在用 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)或后向填充成功填充(bfill)到缺失值,但是当我这样做时我丢失了日期和 gvkey 列。

对于如何为多个组(在此示例中按日期和 gvkey 分组)估算这些缺失值有任何建议吗?我将非常感谢您提供的任何建议。

谢谢

【问题讨论】:

    标签: python pandas


    【解决方案1】:

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

    添加 回答 OP 的问题:

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

    【讨论】:

    • 这会填充缺失的数据点,但不会专门填充到每个 gvkey。例如,在上面的数据框中,gvkey:1045 填充了 gvkey:1004 的前一行。我希望用该 gvkey 的最新先前值向前填充每个唯一 gvkey。
    【解决方案2】:

    这行得通:

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

    感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 2020-02-05
      • 2018-08-14
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-21
      • 2017-05-04
      相关资源
      最近更新 更多