You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中按组并基于条件应用ffill()填充方法

条件性按组填充DataFrame的close列(仅当day列为None时)

需求:仅当DataFrame的day列值为None时,对close列按name分组后使用ffill()填充前值。

示例数据

import pandas as pd
import numpy as np

df = pd.DataFrame({
    "name": ['AAPL','AAPL','AAPL','AAPL','AAPL','AAPL','MSFT','MSFT','MSFT','MSFT','MSFT','MSFT'],
    "day": [None,'Fri', None, None, 'Mon', 'Thue', None,'Fri', None, None, 'Mon', 'Thue'],
    "close": [np.nan, 174.49, np.nan, np.nan, 175.84, np.nan, np.nan, 128.11, np.nan, np.nan, 128.93, np.nan]
})

原始DataFrame输出:

name   day   close
0   AAPL  None     NaN
1   AAPL   Fri  174.49
2   AAPL  None     NaN
3   AAPL  None     NaN
4   AAPL   Mon  175.84
5   AAPL  Thue     NaN
6   MSFT  None     NaN
7   MSFT   Fri  128.11
8   MSFT  None     NaN
9   MSFT  None     NaN
10  MSFT   Mon  128.93
11  MSFT  Thue     NaN

期望结果

name   day   close
0   AAPL  None     NaN
1   AAPL   Fri  174.49
2   AAPL  None  174.49  # day为None时填充前值
3   AAPL  None  174.49  # day为None时填充前值
4   AAPL   Mon  175.84
5   AAPL  Thue     NaN
6   MSFT  None     NaN
7   MSFT   Fri  128.11
8   MSFT  None  128.11  # day为None时填充前值
9   MSFT  None  128.11  # day为None时填充前值
10  MSFT   Mon  128.93
11  MSFT  Thue     NaN

解决方案

通过先按组完成向前填充,再利用条件判断仅替换符合要求的行,代码如下:

# 按name分组对close列执行向前填充
filled_close = df.groupby('name')['close'].ffill()

# 仅将day列为None的行的close值替换为填充后的值,其余保持原样
df['close'] = np.where(df['day'].isna(), filled_close, df['close'])

执行后即可得到符合期望的结果。

内容的提问来源于stack exchange,提问作者user3685918

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 15:47:02