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

在Pandas DataFrame中用非空列替换指定列的实现方法

解决方案:用Pandas实现非空pfv列值替换v5列

很简单,用Pandas的内置方法就能轻松实现这个需求,这里给你两种常用且高效的解决方案,你可以根据习惯选择:

方法1:使用where方法(简洁直观)

where方法会在条件满足时保留指定列的值,不满足时保留原列的值,刚好匹配你的需求:当pfv不为空时,用pfv替换v5,否则保持v5原有的值。

import pandas as pd
import numpy as np

# 先构造你提供的DataFrame(空值用np.nan表示)
data = {
    'v_4': ['0-50', 'Shoes', '0-50', 'Clothes'],
    'v5': ['StoreSale', '0-50', 'DiscountWorld', '4-Dec'],
    's_5': ['Clothes', 'StoreSale', 'Clothes', '51-100'],
    'vt_5': ['8-Apr', 'Clothes', np.nan, 'BetterUncle'],
    'ex_5': ['above', '8-Apr', '51-100', 'Shoes'],
    'pfv': ['100', np.nan, '51-100', np.nan],
    'pfv_cat': ['FatimaStore', np.nan, 'CleanShop', np.nan]
}

df = pd.DataFrame(data)

# 核心替换逻辑
df['v5'] = df['pfv'].where(df['pfv'].notna(), df['v5'])

print(df)

方法2:使用loc索引定位修改(清晰可控)

通过loc精准定位到pfv非空的行,直接给这些行的v5列赋值为pfv的值,逻辑非常直白:

# 同样先构造DataFrame(如果已经构造过可以跳过这部分)
# ...

# 核心替换逻辑
df.loc[df['pfv'].notna(), 'v5'] = df['pfv']

print(df)

运行结果(两种方法效果一致)

执行后你会得到修改后的DataFrame:

v_4            v5        s_5      vt_5    ex_5    pfv      pfv_cat
0    0-50           100    Clothes     8-Apr   above    100  FatimaStore
1   Shoes          0-50  StoreSale    Clothes    8-Apr    NaN          NaN
2    0-50         51-100    Clothes       NaN  51-100  51-100    CleanShop
3  Clothes         4-Dec    51-100  BetterUncle   Shoes    NaN          NaN

可以看到,第0行和第2行的v5已经被对应的pfv值替换,而pfv为空的行(第1、3行)的v5保持了原来的值,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:12:15