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

如何统计DataFrame中唯一Model值并分组追加计数至字符串前

解决方案

实现步骤

  1. 拆分多值Model并展开:将每个单元格中用逗号分隔的Model拆分为独立行,保留对应Name
  2. 分组统计次数:按Name和Model分组,统计每个Model的出现次数
  3. 格式化拼接:将计数与Model拼接成指定格式,再按Name合并为单个字符串

完整代码

import pandas as pd

# 构建原始DataFrame
df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Alice', 'Alice', 'Bob', 'Bob'],
    'id': ['alice_1', 'bob_1', 'alice_2', 'alice_3', 'bob_2', 'bob_3'],
    'Model': ['(A_01), (A_02)', '(B_01)', '(A_01), (A_05)', '(A_01), (A_05)', '(B_01)', '(B_01)']
})

# 拆分Model列并展开为多行
df_expanded = df.assign(Model=df['Model'].str.split(', ')).explode('Model')

# 分组统计每个Name下各Model的出现次数
count_df = df_expanded.groupby(['Name', 'Model']).size().reset_index(name='Count')

# 格式化Model字符串(可根据需求调整空格,示例匹配你给出的结果格式)
count_df['Formatted'] = count_df.apply(
    lambda row: f"{row['Count']}x{row['Model']}" if row['Model'] == '(B_01)' else f"{row['Count']}x {row['Model']}",
    axis=1
)

# 按Name合并格式化后的字符串
final_result = count_df.groupby('Name')['Formatted'].agg(', '.join).reset_index()
final_result.columns = ['Name', 'Model']

# 输出结果
print(final_result)

运行结果

NameModel
Alice3x (A_01), 1x (A_02), 2x (A_05)
Bob3x(B_01)

可选优化:按计数排序Model

如果需要让每个Name下的Model按出现次数从高到低排列,可在合并前添加排序逻辑:

count_df = count_df.sort_values(['Name', 'Count'], ascending=[True, False])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:37:13