如何用Pandas实现带if else条件的动态列生成与数据转换
Pandas 实现代码及说明
核心实现步骤
- 第一步:对
location、category字段做独热编码,自动生成带指定前缀的0/1列 - 第二步:对
ftecount、bpssscore字段做阈值判断,转换为0/1值 - 第三步:按
project聚合得到主键唯一的结果表
完整代码
import pandas as pd import numpy as np # 1. 读取原始数据(替换为你自己的数据源读取逻辑) df = pd.read_csv("your_data_path.csv") # 2. 生成location、category对应的独热编码列 df_encoded = pd.get_dummies( df, columns=["location", "category"], prefix=["loc", "cat"], dtype=int # 直接输出整数1/0,无需额外转换布尔值 ) # 3. 转换ftecount、bpssscore为0/1值 df_encoded["ftecount"] = np.where(df_encoded["ftecount"] > 3, 1, 0) df_encoded["bpssscore"] = np.where(df_encoded["bpssscore"] > 3, 1, 0) # 4. 按project聚合,得到主键唯一的结果 # 若原始数据每个project仅有一行,可跳过此步,直接输出df_encoded即可 result_df = df_encoded.groupby("project", as_index=False).max() # 可选:仅保留需要的字段,过滤掉原始不需要的列 keep_columns = ["project"] + [col for col in df_encoded.columns if col.startswith(("loc_", "cat_", "ftecount", "bpssscore"))] result_df = result_df[keep_columns]
说明
- 独热编码逻辑完全适配需求:会自动提取
location、category的所有唯一值生成新列,前缀匹配要求,对应行匹配时赋值1,否则为0 - 聚合时用
max()是为了保证同一个project下只要出现过对应location、category,对应列就标记为1,符合大部分业务场景的特征统计需求,你也可以根据实际业务调整聚合规则 - 用
np.where比apply处理大体积数据集时效率更高
内容的提问来源于stack exchange,提问作者Pallavi Kumari
相关产品推荐
相关产品推荐

