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

Pandas DataFrame基于客户及组CSATE评分创建条件新列求助

Pandas 交叉反转状态列计算实现方案

你现有代码的问题是仅覆盖了「客户评分从低于组评分变为高于组评分」的单方向反转场景,遗漏了「客户评分从高于组评分变为低于组评分」的反向反转场景,因此无法输出符合预期的结果。


实现步骤

  1. 先计算is_customer_perf_above_group_perf列:直接对两列做大小比较即可,返回布尔值
  2. 再计算customer_group_csate_score_toggle_status列:对比当前行的大小关系与上一行的大小关系是否不一致,第一行无前置行默认返回False

完整可运行代码

import pandas as pd
import numpy as np

# 构造样例数据
data = {
    "customer_csate_score": [0.000, -0.4, 0, 0.578, 0.418, -0.765, 0.89],
    "group_csate_score": [-0.15, 0.12, 0.13, 0.81, 0.96, 0.1, -0.87]
}
df = pd.DataFrame(data)

# 计算是否客户评分高于组评分
df['is_customer_perf_above_group_perf'] = df['customer_csate_score'] > df['group_csate_score']

# 计算反转状态:当前行和上一行大小关系不一致则为True
df['customer_group_csate_score_toggle_status'] = (
    df['is_customer_perf_above_group_perf'] 
    != df['is_customer_perf_above_group_perf'].shift(fill_value=df['is_customer_perf_above_group_perf'].iloc[0])
)

如果需要封装为函数调用,可以用以下写法:

def check_cust_group_crossover(df, df_key1, df_key2):
    curr_above = df[df_key1] > df[df_key2]
    prev_above = df[df_key1].shift() > df[df_key2].shift()
    # 第一行无前置数据,填充为False
    return (curr_above != prev_above).fillna(False)

# 调用函数生成列
df['customer_group_csate_score_toggle_status'] = check_cust_group_crossover(df, 'customer_csate_score', 'group_csate_score')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:42:01