【问题标题】:Multi-Indexed fillna in PandasPandas 中的多索引填充
【发布时间】:2016-11-30 15:22:49
【问题描述】:

我有一个多索引数据框,我希望在组中回填缺失值。我目前拥有的数据框如下所示:

df = pd.DataFrame({
                'group': ['group_a'] * 7 + ['group_b'] * 3 + ['group_c'] * 2,
                'Date': ["2013-06-11",
                        "2013-07-02",
                        "2013-07-09",
                        "2013-07-30",
                        "2013-08-06",
                        "2013-09-03",
                        "2013-10-01",
                        "2013-07-09",
                        "2013-08-06",
                        "2013-09-03",
                        "2013-07-09",
                        "2013-09-03"],
                 'Value': [np.nan, np.nan, np.nan,  9,  4, 40, 18, np.nan, np.nan, 5, np.nan, 2]})

df.Date = df['Date'].apply(lambda x: pd.to_datetime(x).date())
df = df.set_index(['group', 'Date'])

我正在尝试获取一个回填组中缺失值的数据框。 像这样:

Group   Date        Value
group_a 2013-06-11      9
        2013-07-02      9
        2013-07-09      9
        2013-07-30      9
        2013-08-06      4
        2013-09-03     40
        2013-10-01     18
group_b 2013-07-09      5
        2013-08-06      5
        2013-09-03      5
group_c 2013-07-09      2
        2013-09-03      2

我尝试使用pd.fillna('Value', inplace=True),但在设置副本值时收到警告,我后来发现这与多索引的存在有关。有没有办法让 fillna 为多索引行工作?此外,理想情况下,我只能将 fillna 应用于一列而不是整个数据框。

对此的任何见解都会很棒。

【问题讨论】:

    标签: python pandas missing-data multi-index


    【解决方案1】:

    使用groupby(level=0),然后使用bfillupdate

    df.update(df.groupby(level=0).bfill())
    df
    

    注意:update 原地更改 df

    其他选择

    df = df.groupby(level='group').bfill()
    
    df = df.unstack(0).bfill().stack().swaplevel(0, 1).reindex_like(df)
    

    特定列

    df.Value = df.groupby(level=0).Value.bfill()
    

    【讨论】:

    • 这就是你的结局。从df = df.copy()开始。
    • @Charles 我更新了我的帖子,最后,我有一个特定列的部分。
    猜你喜欢
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2013-07-17
    • 2016-09-18
    • 1970-01-01
    • 2014-11-18
    相关资源
    最近更新 更多