根据另一列中的条件填充熊猫

Gau*_*sal 6 python dataframe 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]
})
Run Code Online (Sandbox Code Playgroud)

我想使用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
Run Code Online (Sandbox Code Playgroud)

Sco*_*ton 12

使用groupby

df.groupby('category').ffill()
Run Code Online (Sandbox Code Playgroud)

输出:

   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
Run Code Online (Sandbox Code Playgroud)

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

df['rate'] = df.groupby('category')['rate'].ffill()
Run Code Online (Sandbox Code Playgroud)