如何基于另一列类别条件使用Pandas ffill填充rate列?
按类别分组实现Pandas rate列的匹配前向填充
嘿,这个需求其实很好解决,核心就是按category分组后再执行前向填充,这样就能确保每个填充值都只来自对应类别的历史有效数据,不会出现跨类别填充的错误。
步骤1:构造示例数据(模拟你的场景)
先假设你的DataFrame长这样:
import pandas as pd df = pd.DataFrame({ 'category': ['A', 'A', 'A', 'B', 'B', 'C', 'C', 'C'], 'rate': [0.5, None, 0.6, None, 0.7, 0.8, None, None] })
步骤2:执行分组前向填充
只需要一行代码就能搞定:
# 按category分组,对rate列应用ffill df['rate'] = df.groupby('category')['rate'].ffill()
处理后的结果
执行完上面的代码后,你的DataFrame会变成这样:
| category | rate |
|---|---|
| A | 0.5 |
| A | 0.5 |
| A | 0.6 |
| B | NaN |
| B | 0.7 |
| C | 0.8 |
| C | 0.8 |
| C | 0.8 |
补充说明
- 如果某个类别的第一个值就是
NaN,ffill不会填充它(因为没有前面的值可以拿来填充),如果需要处理这种情况,可以额外结合bfill(比如df.groupby('category')['rate'].ffill().bfill()),不过这取决于你的实际需求。 groupby的作用是把相同category的数据打包成独立的小组,每个小组内部单独执行前向填充,这就保证了填充值完全匹配对应的类别。
内容的提问来源于stack exchange,提问作者Gaurav Bansal
相关产品推荐
相关产品推荐

