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

基于合并后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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:26:10