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

如何对DataFrame各列应用value_counts()生成指定格式值计数结果

pandas逐列value_counts横向拼接实现

实现逻辑

针对包含ID、Department、Level三列共8条记录的DataFrame,逐列调用value_counts()完成值频次统计,按要求横向拼接结果:

  • 每个原始列和它的计数字段成对相邻排列
  • 各列唯一值数量不一致时,短列无有效数据的后续位置自动补空对齐
  • 支持配置同一列非首行位置留空的格式要求

完整代码

import pandas as pd

# 构造8条记录的示例数据集
df = pd.DataFrame({
    'ID': [1, 2, 3, 4, 5, 2, 3, 3],
    'Department': ['Tech', 'HR', 'Tech', 'Finance', 'HR', 'Tech', 'Finance', 'HR'],
    'Level': ['P3', 'P4', 'P5', 'P4', 'P3', 'P5', 'P4', 'P3']
})

result_parts = []
max_row_count = 0

# 逐列做值频次统计
for col in df.columns:
    # 调用value_counts统计频次,重置索引生成「取值、计数」两列
    col_count = df[col].value_counts().reset_index()
    col_count.columns = [col, '计数']
    # 若需要同一列非首行的取值位置留空,取消注释下一行代码即可
    # col_count.loc[1:, col] = ''
    result_parts.append(col_count)
    # 记录最长的统计结果行数,用于后续对齐
    max_row_count = max(max_row_count, len(col_count))

# 横向拼接所有列的统计结果,长度不足的位置补空
final_result = pd.concat(
    [part.reindex(range(max_row_count), fill_value='') for part in result_parts],
    axis=1
)

# 打印输出最终结果
print(final_result)

输出效果

默认配置下(不启用留空规则)输出格式如下,所有取值完整显示,短列无数据位置自动留空:

ID计数Department计数Level计数
33Tech3P33
22HR3P43
11Finance2P52
41
51

注:统计结果默认按频次从高到低排序,和value_counts()原生排序规则一致,不需要额外排序操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:51:26