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

如何统计DataFrame各列中指定字符串的出现次数并生成新DataFrame

统计DataFrame各列中"name"的出现次数并生成新DataFrame

你有一个包含字符串"name"的DataFrame,想要统计每一列里"name"的出现次数,并存到新的DataFrame里。尝试用循环遍历列统计后,没得到预期结果,输出还冗余。

示例数据代码:

import pandas as pd

data1 = {'first_column':  ['1', '2', 'name'],
        'second_column': ['name', 'name', 'name'],
         'id_number':['name', '4', 'name'],
        'fourth_column':['5', 'name', '2'],
        }

df1 = pd.DataFrame(data1)

你尝试的代码:

for col in df1:
  df2 = df1[df1[col] == "name"].count()
  print(df2)

问题分析

你原来的循环代码有两个核心问题:

  • 每次循环都会生成包含所有列计数的Series,赋值给df2后会覆盖之前的结果,最终df2只保留最后一列的统计值
  • 每次print(df2)都会输出所有列的计数,导致输出冗余重复

解决方案

方法一:Pandas简洁写法(推荐)

直接对整个DataFrame做相等判断,再按列求和,一步得到各列"name"的次数,最后转成新DataFrame:

# 统计每列中"name"的出现次数
name_counts = df1.eq("name").sum()

# 转换为新DataFrame,设置明确的列名
df2 = pd.DataFrame(name_counts, columns=["name出现次数"])
print(df2)

输出结果:

name出现次数
first_column             1
second_column            3
id_number                2
fourth_column            1

方法二:修复循环写法

如果一定要用循环实现,先初始化空字典存储每列的计数,最后转成DataFrame:

count_dict = {}
for col in df1.columns:
    # 只统计当前列的"name"数量
    count = (df1[col] == "name").sum()
    count_dict[col] = count

# 从字典生成DataFrame
df2 = pd.DataFrame.from_dict(count_dict, orient="index", columns=["name出现次数"])
print(df2)

这个方法和方法一结果一致,但方法一更高效简洁,是处理这类统计的惯用方式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:46:57