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

如何为DataFrame按NAME分组生成TEST列的频次统计新列?

解决方案

要实现按NAME统计TEST各值的出现次数并生成RESUME列,你可以通过分组统计+合并去重的方式完成,具体步骤如下:

1. 统计每个NAME的TEST值频次

使用groupby结合value_counts统计频次,再将结果整理为字典格式(方便后续转换为目标样式):

counts = df.groupby('NAME')['TEST'].value_counts().unstack(fill_value=0).apply(lambda x: x[x>0].to_dict(), axis=1)

2. 合并结果并去重

将统计结果合并回原DataFrame,再按NAME去重,保留每个NAME的唯一行:

# 合并统计结果到原数据
df = df.merge(counts.rename('RESUME'), on='NAME')
# 按NAME去重,保留每个NAME的第一条记录
result = df.drop_duplicates(subset='NAME').reset_index(drop=True)
# 将字典格式转为你需要的列表字符串样式
result['RESUME'] = result['RESUME'].apply(lambda d: [f"{k}: {v}" for k, v in d.items()])

完整可运行代码

import pandas as pd

# 原始DataFrame
data = {
    'NAME': ['Homer Simpson', 'Homer Simpson', 'Homer Simpson', 'Marge Simpson', 'Marge Simpson', 'Lisa Simpson', 'Bart Simpson', 'Maggie Simpson'],
    'TEST': ['PASSED', 'FAILED', 'FAILED', 'PASSED', 'PASSED', 'PASSED', 'FAILED', 'FAILED']
}
df = pd.DataFrame(data)

# 执行统计与格式转换
counts = df.groupby('NAME')['TEST'].value_counts().unstack(fill_value=0).apply(lambda x: x[x>0].to_dict(), axis=1)
df = df.merge(counts.rename('RESUME'), on='NAME')
result = df.drop_duplicates(subset='NAME').reset_index(drop=True)
result['RESUME'] = result['RESUME'].apply(lambda d: [f"{k}: {v}" for k, v in d.items()])

print(result)

输出结果

NAME    TEST                  RESUME
0    Homer Simpson  PASSED  [PASSED: 1, FAILED: 2]
1    Marge Simpson  PASSED          [PASSED: 2]
2     Lisa Simpson  PASSED          [PASSED: 1]
3     Bart Simpson  FAILED          [FAILED: 1]
4  Maggie Simpson  FAILED          [FAILED: 1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:45:38