如何在Python Pandas中按行统计HTML标签出现频次?
解决思路与实现代码
你可以通过以下两种高效的Pandas方法完成格式转换:
方法一:逐行统计标签频次并补全列
这种方法直接对每行(单个文件的标签数据)做频次统计,再统一补全所有88种标签的列,缺失项填充0:
import pandas as pd # 假设原数据框为df,索引是文件名 # 获取所有唯一标签(若已知88种标签列表,可直接替换为自定义列表) all_tags = df.stack().unique() # 逐行统计标签出现次数,补全所有标签列并填充0 count_df = df.apply( lambda row: row.value_counts(), axis=1 ).reindex(all_tags, axis=1).fillna(0).astype(int)
方法二:宽表转窄表再透视统计
适合数据量较大的场景,先将宽表转换为窄表结构,再通过透视表统计频次:
import pandas as pd # 转换为窄表:保留文件名、标签值,丢弃空标签 melted_df = df.reset_index().melt( id_vars='index', value_name='tag' ).dropna(subset=['tag']) # 透视统计每个文件的标签出现次数,缺失项填充0 count_df = melted_df.pivot_table( index='index', columns='tag', aggfunc='size', fill_value=0 ) # 还原文件名为索引名 count_df.index.name = None
关键说明
- 若原数据存在全空列,可先执行
df = df.dropna(axis=1, how='all')清理,避免无效统计。 - 若已知88种标签的精确列表,直接替换
all_tags为该列表,能保证列的完整性与准确性。 - 转换后的
count_df可直接用于describe()、value_counts()等统计分析操作。
内容的提问来源于stack exchange,提问作者Hannah Lee
相关产品推荐
相关产品推荐

