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

如何在Python DataFrame的各列中统计自定义列表值的出现次数?

解决DataFrame自定义值按列统计次数的问题

我来帮你搞定这个统计需求!先看看你之前代码里的几个小问题:

  • 循环顺序搞反了:你先遍历关键词再遍历列,这样会重复处理同一列多次,效率低还容易混乱,应该先遍历每一列,再对该列统计所有目标关键词的次数
  • 统计方法不对:
    • _tmp_df[_tmp_df[column] == x].count() 会返回整个DataFrame中符合条件的行的所有列计数,不是当前列的单个值计数
    • str.count(x) 是统计每个单元格里字符串x出现的次数(比如单元格是'hihi'会算2次),不是单元格等于x的次数
    • [_tmp_df[column] == x].count 只是引用了count方法,没有实际调用执行

下面给你两种靠谱的实现方式,都能输出你想要的格式:

方法一:逐列遍历+统计输出

这种方式直观易懂,适合新手理解:

import pandas as pd

# 替换成你的实际DataFrame
_tmp_df = pd.DataFrame({
    'column_1': ['hi', 'hello', '-', 'hi', '01.01.9999', 'hi'],
    'column_2': ['hello', 'hello', '-', '-', '-', 'hi']
})

# 你的自定义目标值列表
target_values = ['hi', 'hello', '-', '01.01.9999']

# 遍历每一列
for col_name in _tmp_df.columns:
    # 统计当前列的目标值出现次数:
    # value_counts() 统计现有值的次数,reindex补全所有目标值,fill_value=0填充不存在的值的计数
    value_counts = _tmp_df[col_name].value_counts().reindex(target_values, fill_value=0)
    # 按要求格式输出每一个目标值的计数
    for val, cnt in value_counts.items():
        print(f"{col_name}, '{val}', {cnt}")

运行这段代码会输出:

column_1, 'hi', 3
column_1, 'hello', 1
column_1, '-', 1
column_1, '01.01.9999', 1
column_2, 'hi', 1
column_2, 'hello', 2
column_2, '-', 3
column_2, '01.01.9999', 0

方法二:批量处理+格式转换

如果你的DataFrame列很多,用apply批量处理效率更高,最后再转成目标格式:

import pandas as pd

_tmp_df = pd.DataFrame({
    'column_1': ['hi', 'hello', '-', 'hi', '01.01.9999', 'hi'],
    'column_2': ['hello', 'hello', '-', '-', '-', 'hi']
})

target_values = ['hi', 'hello', '-', '01.01.9999']

# 批量统计所有列的目标值次数
count_result = _tmp_df.apply(lambda col: col.value_counts().reindex(target_values, fill_value=0))

# 把宽格式的结果转成你需要的长格式
long_format = count_result.unstack().reset_index()
long_format.columns = ['column_name', 'target_value', 'count']

# 遍历输出
for _, row in long_format.iterrows():
    print(f"{row['column_name']}, '{row['target_value']}', {row['count']}")

这段代码的输出和方法一完全一致,但处理大量列时速度更快。

核心逻辑说明

reindex(target_values, fill_value=0) 是关键:它会强制把统计结果的索引替换成你的目标列表,对于列中不存在的目标值,自动填充0,这样就能保证每个列都能输出四个目标值的计数,包括出现次数为0的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 05:52:26