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

如何移除pandas Series中value_counts的计数值且保留原有表结构

问题说明

需求:将代码运行输出保持为pandas.Series类型,不改变表格原有多层级展示结构、不改动排布格式的前提下,移除value_counts()生成的计数值列。
已尝试的代码如下:

import pandas as pd
df = pd.DataFrame({'A':['a','b'],'C':['1','2'],
               'B':[[['A1', 'A2']],[['A1', 'A2', 'A3']]]})

df = df['B'].apply(lambda x: pd.Series(x[0])).stack().reset_index(level=1, drop=True).to_frame('B').join(df[['A','C']], how='left')
print(df.groupby(['A', 'C']).value_counts().sort_index())

当前运行输出:

A  C  B 
a  1  A1    1
      A2    1
b  2  A1    1
      A2    1
      A3    1
dtype: int64

预期输出:

A  C  B 
a  1  A1    
      A2    
b  2  A1    
      A2    
      A3
实现方案

现有代码已经生成了符合层级要求的三层MultiIndex,value_counts()返回的Series中,索引就是目标的A/C/B层级结构,值是不需要展示的计数。直接保留原索引,将Series值替换为空字符串即可,全程不改动原有数据处理逻辑,也不会破坏原有的层级缩进、排序格式。
修正后完整代码:

import pandas as pd
df = pd.DataFrame({'A':['a','b'],'C':['1','2'],
               'B':[[['A1', 'A2']],[['A1', 'A2', 'A3']]]})

df = df['B'].apply(lambda x: pd.Series(x[0])).stack().reset_index(level=1, drop=True).to_frame('B').join(df[['A','C']], how='left')
count_res = df.groupby(['A', 'C']).value_counts().sort_index()
# 保留原有多层索引结构,替换值为空以移除计数展示
res = pd.Series([''] * len(count_res), index=count_res.index)
print(res)

运行后输出和预期完全匹配,索引排布、层级缩进和原输出无差异,仅移除了右侧的计数字段。如果数据中存在重复的(A,C,B)组合,该方案也能和原代码的分组逻辑保持一致,不需要额外调整。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:24:58