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

Pandas按两列groupby后分别统计两列value_counts输出为不同列的方法

解决方案

问题分析

你原代码的问题有两个:

  1. 同时选中两列传入apply处理,返回的统计结果会合并到同一列,无法拆分出两个独立统计列
  2. 直接对列表类型列使用astype('str')会把整个列表转为单个字符串统计,无法统计列表内部单个元素的出现次数

实现代码

首先构造示例DataFrame:

import pandas as pd

data = {'label': ['cat','dog','dog','cat','cat'],
      'breeds': [ 'bengal','shar pei','pug','maine coon','maine coon'],
      'nicknames':[['Loki','Loki' ],['Max'],['Toby','Zeus ','Toby'],['Marty'],['Erin ','Erin']],
       'eye color':[['blue','green'],['green'],['brown','brown','brown'],['blue'],['green','brown']]
}
df = pd.DataFrame(data)

使用agg方法为每个列单独指定聚合逻辑,先拆分列表元素再统计:

result = df.groupby(['label', 'breeds'], as_index=False).agg(
    nickname_count = ('nicknames', lambda x: x.explode().str.strip().value_counts().to_dict()),
    eye_count = ('eye color', lambda x: x.explode().str.strip().value_counts().to_dict())
)

补充说明

如果需要保留元素首尾的空格作为不同值区分,删除聚合逻辑中的.str.strip()即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:54:03