基于合并后DataFrame的两列对应值创建新列的技术问询
嘿,我来帮你搞定基于两列对应值创建新列的问题!针对你手里的junkdf,我整理了几种实用的实现方法,你可以根据实际需求挑选:
方法1:用
apply()实现自定义复杂逻辑 如果你的新列需要结合两列做多条件判断或者复杂的自定义规则,apply()会非常灵活。我先补全了你给出的junkdf(把截断的Transaction_Type_y补成示例值方便演示),然后给你写个例子:
import pandas as pd # 补全后的示例数据集 junkdf = pd.DataFrame({ 'User_ID': [340,558,558,558,983,422,100,740,740], 'Transaction_Type_x': ['Purchase']*9, 'Rev/Payout_x': [50, 20, 20,28,37,50,40,50,55], 'Cohort_x': ['2010-01','2010-01','2010-02','2010-2','2010-02','2010-02','2010-03','2010-04','2010-04'], 'Transaction_Type_y': ['Sale', 'Sale', 'Refund', 'Sale', 'Refund', 'Sale', 'Sale', 'Refund', 'Sale'] }) # 自定义函数:根据两列的值生成新列内容 def classify_transaction(row): if row['Transaction_Type_y'] == 'Sale' and row['Rev/Payout_x'] >= 50: return '高价值销售' elif row['Transaction_Type_y'] == 'Refund' and row['Rev/Payout_x'] < 30: return '小额退款' else: return '其他类型' # 应用函数到每一行,创建新列 junkdf['交易分类'] = junkdf.apply(classify_transaction, axis=1)
方法2:用
np.where()做简单二元/少数条件判断 如果你的逻辑只是简单的是/否或者2-3个条件,用numpy.where()会比apply()更高效,适合大数据集:
import numpy as np # 示例:如果y列是Sale且x列金额>40,标记为"优质客户",否则"普通客户" junkdf['客户等级'] = np.where( (junkdf['Transaction_Type_y'] == 'Sale') & (junkdf['Rev/Payout_x'] > 40), '优质客户', '普通客户' )
方法3:直接列运算或映射
如果新列是两列的数值计算,或者是对某列的简单映射,直接用列操作就可以,最简洁:
# 数值运算示例:创建金额的1.2倍列 junkdf['金额1.2倍'] = junkdf['Rev/Payout_x'] * 1.2 # 映射示例:给交易类型做编码(Sale=1,Refund=0) type_mapping = {'Sale': 1, 'Refund': 0} junkdf['交易类型编码'] = junkdf['Transaction_Type_y'].map(type_mapping)
小提示:如果你的Transaction_Type_y列确实是截断的(比如显示'Sa...'),记得先处理好数据的完整性,比如补全缺失值或者修正截断内容,再进行新列创建哦!
内容的提问来源于stack exchange,提问作者Kbbm
相关产品推荐
相关产品推荐

