如何统计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
相关产品推荐
相关产品推荐

