【问题标题】:pandas ffill based on condition in another columnpandas 根据另一列中的条件填充
【发布时间】:2018-02-16 05:33:39
【问题描述】:

我有一个如下所示的 pandas DataFrame。

df = pd.DataFrame({
    'date': ['2011-01-01', '2011-01-01', '2011-02-01', '2011-02-01', '2011-03-01', '2011-03-01', '2011-04-01', '2011-04-01'],
    'category': [1, 2, 1, 2, 1, 2, 1, 2],
    'rate': [0.5, 0.75, np.nan, np.nan, 1, 1.25, np.nan, np.nan]
})

我想使用ffill 转发填充rate 的值,除了我希望每个值也对应于适当的category。我怎样才能让df 看起来像这样?:

df
    category    date    rate
    1     2011-01-01    0.50
    2     2011-01-01    0.75
    1     2011-02-01    0.50
    2     2011-02-01    0.75
    1     2011-03-01    1.00
    2     2011-03-01    1.25
    1     2011-04-01    1.00
    2     2011-04-01    1.25

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    使用groupby:

    df.groupby('category').ffill()
    

    输出:

       category        date  rate
    0         1  2011-01-01  0.50
    1         2  2011-01-01  0.75
    2         1  2011-02-01  0.50
    3         2  2011-02-01  0.75
    4         1  2011-03-01  1.00
    5         2  2011-03-01  1.25
    6         1  2011-04-01  1.00
    7         2  2011-04-01  1.25
    

    如果您不想填充其他包含 NaN 的列,那么您可以使用它来填充速率列中的 NaN:

    df['rate'] = df.groupby('category')['rate'].ffill()
    

    【讨论】:

    • 如何在不去掉类别列的情况下实现这一点?
    • @haneulkim 在末尾添加 .reset_index() 以将“类别”列移出索引。
    猜你喜欢
    • 2021-06-04
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多