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

Pandas实战问题:如何根据B列True/False值获取A列最后一个非NaN值

Pandas 需求实现解答

这个需求完全可以实现,经核对你文字描述的需求和你贴出的期望结果逻辑存在差异,我分别给出两种场景的实现代码:


前置准备:构造样例数据表

import pandas as pd
import numpy as np

df = pd.DataFrame({
    "A": [754, None, None, None, None, 999, None, None, None, 875],
    "B": [False, False, False, False, True, False, False, True, False, False]
})

方案1:匹配你文字描述的需求

需求逻辑:B列取值为True时,C列填入当前行之前A列的最后一个非NaN值,其余情况C列为NaN
实现代码:

# 生成每一行对应上方最近的A列非空值的辅助列
df["a_last_notna"] = df["A"].ffill()
# 仅B列为True时赋值
df["C"] = np.where(df["B"], df["a_last_notna"], np.nan)
# 删除辅助列
df.drop("a_last_notna", axis=1, inplace=True)

运行后结果:

索引ABC
0754FalseNaN
1NoneFalseNaN
2NoneFalseNaN
3NoneFalseNaN
4NoneTrue754
5999FalseNaN
6NoneFalseNaN
7NoneTrue999
8NoneFalseNaN
9875FalseNaN

方案2:匹配你贴出的期望结果

需求逻辑:仅当前行A列非空且B列为False时,C列填入A列的值,其余情况C列为NaN
实现代码:

df["C"] = np.where(df["A"].notna() & ~df["B"], df["A"], np.nan)

运行后结果和你贴出的期望表完全一致:

索引ABC
0754False754
1NoneFalseNaN
2NoneFalseNaN
3NoneFalseNaN
4NoneTrueNaN
5999False999
6NoneFalseNaN
7NoneTrueNaN
8NoneFalseNaN
9875FalseNaN

你可以根据自己的实际业务需求选择对应的实现方案即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:09:04