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

如何基于同用户同品类的revenue行参考值填充DataFrame的segment列?

解决方案

首先得处理amount列的格式——因为带$符号没法直接做数值比较,先把它转成数值类型:

df['amount'] = df['amount'].str.replace('$', '').astype(float)

接下来先给business为revenue的行计算segment,cost行暂时设为缺失值:

import numpy as np
import pandas as pd

df['segment'] = np.where(
    df['business'] == 'revenue',
    np.where( (df['amount'] < 15) & (df['goods_type'] == 'used'), 'low', 'high' ),
    np.nan
)

最后按user和goods_type分组,把每组里的缺失值(也就是cost行)用同组的revenue行的segment值填充:

df['segment'] = df.groupby(['user', 'goods_type'])['segment'].transform(lambda x: x.ffill().bfill())

测试示例数据后,输出会和你期望的完全一致:

user  amount goods_type  business segment
0     1    10.0       used      cost     low
1     1    30.0       used   revenue     low
2     1    15.0        new      cost    high
3     1    50.0        new   revenue    high

如果觉得分组变换的逻辑不够直观,也可以用合并的方式实现:

# 提取revenue行计算segment,只保留匹配需要的字段
revenue_seg = df[df['business'] == 'revenue'].assign(
    segment = np.where( (df['amount'] < 15) & (df['goods_type'] == 'used'), 'low', 'high' )
)[['user', 'goods_type', 'segment']]

# 将计算好的segment合并回原表,cost行自动匹配对应值
df = df.merge(revenue_seg, on=['user', 'goods_type'], how='left')

这种方法逻辑更清晰,适合数据量较大的场景,能避免分组变换的额外开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:55:17