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

如何统计Pandas中按ID分组的Type组合出现次数及对应均价

实现代码

你可以分两步聚合实现需求,先按ID生成每个ID对应的类型组合和单ID均价,再按组合维度统计最终结果:

import pandas as pd

# 构造示例数据,你实际用的时候替换成自己的DataFrame即可
df = pd.DataFrame({
    'ID': [1,2,1,3,4,2,1],
    'Type': ['A','B','B','A','A','B','A'],
    'Price': [230,150,180,280,222,124,221]
})

# 第一步:按ID分组生成单ID的类型组合、单ID均价
id_level = df.groupby('ID').agg(
    # 统计类型频次后排序拼接,确保相同组合的字符串完全一致
    Combination=('Type', lambda s: '[' + ', '.join([f"{cnt}x {typ}" for typ, cnt in sorted(s.value_counts().items())]) + ']'),
    id_avg=('Price', 'mean')
).reset_index()

# 第二步:按组合分组统计出现次数、组合对应均价
final_res = id_level.groupby('Combination', as_index=False).agg(
    Counts=('ID', 'count'),
    Mean_Price=('id_avg', 'mean')
).rename(columns={'Mean_Price': 'Mean Price'}).round(2)

# 如果需要把小数点换成逗号,加上这行即可
final_res['Mean Price'] = final_res['Mean Price'].astype(str).str.replace('.', ',')

输出的final_res就和你给出的预期结果完全一致。

关键说明

  • 对类型频次的结果加sorted是为了避免同一组合因为Type出现顺序不同,生成的字符串不一样导致统计错误,比如同一个ID的Type序列是[A,B,A]和[B,A,A],最终生成的组合字符串都会是[2x A, 1x B]
  • 单ID先算均价再按组合取平均,是符合你给出的示例计算逻辑的,如果需求是按组合下所有原始Price算平均,把第二步的聚合逻辑改成('Price', 'mean')即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:27:03