Pandas groupby按指定列分组统计多列数值出现频次实现问题
实现方法
核心思路为先规整数据结构,再按指定字段分组统计频次,以下是两种可直接运行的实现方案:
方案1:宽表转长表后分组统计
import pandas as pd # 假设你原始的DataFrame命名为df # 1. 把需要统计的3/4/5/6列转为长表结构 df_melt = df.melt(id_vars=[0], value_vars=[3,4,5,6]) # 2. 按第0列和数值分组统计出现次数 res = df_melt.groupby([0, 'value'], as_index=False)['variable'].count() # 3. 重命名列匹配期望输出格式 res.columns = [0, 3, 4] # 可选:按第0列、数值列排序 res = res.sort_values(by=[0, 3]).reset_index(drop=True)
方案2:分组后直接栈化统计
import pandas as pd res = df.groupby(0, as_index=False).apply( lambda group: group[[3,4,5,6]].stack().value_counts() ).rename(columns={'level_1': 3, 0: 4})
注意:如果你的DataFrame列是字符串类型,需要把代码里的数字列名包裹引号,比如
id_vars=['0']、value_vars=['3','4','5','6']即可。
两种方案输出结果均完全匹配你给出的期望格式。
内容的提问来源于stack exchange,提问作者Lucas Francklin
相关产品推荐
相关产品推荐

