在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
相关产品推荐
相关产品推荐

