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

如何按条件拆分数据集行并对比用户两次会话的分数变化

按用户拆分数据集并对比会话分数升降

步骤1:先补全缺失的用户ID

你的数据集里User列存在空值,第一步需要把这些空值填充为对应的用户ID,方便后续分组处理。用Python的pandas可以快速实现:

import pandas as pd

# 构造你的数据集(如果是从文件读取,替换成pd.read_csv/Excel即可)
df = pd.DataFrame({
    'User': [1, None, 2, None, 3, None, 4, None],
    'Session': [1,2,1,2,1,2,1,2],
    'Score': [4,5,5,3,4,5,3,3]
})

# 向前填充缺失的User值
df['User'] = df['User'].ffill()

处理后每个行都会有对应的用户ID,数据集变成:

User Session Score
1 1 4
1 2 5
2 1 5
2 2 3
3 1 4
3 2 5
4 1 3
4 2 3

步骤2:按用户拆分数据集

如果需要把每个用户的数据单独拆分出来,可以用groupby生成分组字典:

# 按User分组,得到以用户ID为键的数据集字典
user_datasets = dict(tuple(df.groupby('User')))

# 比如提取用户1的数据集
user_1_data = user_datasets[1]

步骤3:对比两次会话的分数升降

因为每个用户只有两行数据,直接分组后提取第一次、最后一次会话的分数,判断变化即可:

def judge_score_change(group):
    # 按Session排序,确保会话1在前
    sorted_group = group.sort_values('Session')
    first_score = sorted_group.iloc[0]['Score']
    last_score = sorted_group.iloc[-1]['Score']
    
    if last_score > first_score:
        return '上升'
    elif last_score < first_score:
        return '下降'
    else:
        return '持平'

# 生成每个用户的分数对比结果
result = df.groupby('User').apply(
    lambda x: pd.Series({
        '会话1分数': x[x['Session']==1]['Score'].values[0],
        '会话2分数': x[x['Session']==2]['Score'].values[0],
        '分数变化': judge_score_change(x)
    })
).reset_index()

最终结果会是:

User 会话1分数 会话2分数 分数变化
1 4 5 上升
2 5 3 下降
3 4 5 上升
4 3 3 持平

额外:按条件调用指定行

如果需要直接提取特定条件的行,用布尔索引即可:

# 提取所有会话1的行
session1_rows = df[df['Session'] == 1]
# 提取用户2的所有行
user2_rows = df[df['User'] == 2]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:01:57