如何在Pandas中按行统计列中特定唯一值的数量?
Pandas按行统计特定值出现次数的实现思路
核心思路
针对每行的数值列(COL1至COL5),统计指定目标值的出现次数,将结果作为新列追加到原DataFrame中。
具体实现步骤
- 准备数据:创建或导入目标DataFrame
import pandas as pd data = { 'Species': ['SP1', 'SP2', 'SP3'], 'COL1': ['0', '1-2', '0-1'], 'COL2': ['0', '2', '1'], 'COL3': ['0', '0', '2'], 'COL4': ['1-2', '1', '0'], 'COL5': ['0-1-2', '0', '1-2'] } df = pd.DataFrame(data)
- 定义统计目标:列出需要统计的所有特定值
target_values = ['0', '1-2', '0-1-2', '1', '2']
- 逐行统计并对齐结果:
通过apply遍历每行,用value_counts统计值出现次数,再用reindex确保所有目标值都有统计结果(缺失值填0)
count_df = df.drop('Species', axis=1).apply( lambda row: pd.Series(row.value_counts()).reindex(target_values, fill_value=0), axis=1 )
- 重命名统计列:给统计结果的列名加上
count_前缀,匹配需求格式
count_df.columns = [f'count_{val}' for val in target_values]
- 合并结果:将统计列与原DataFrame横向拼接
result_df = pd.concat([df, count_df], axis=1)
最终结果
执行上述代码后,result_df会生成需求中的格式:
Species COL1 COL2 COL3 COL4 COL5 count_0 count_1-2 count_0-1-2 count_1 count_2 0 SP1 0 0 0 1-2 0-1-2 3 1 1 0 0 1 SP2 1-2 2 0 1 0 2 1 0 1 1 2 SP3 0-1 1 2 0 1-2 1 1 0 2 1
内容的提问来源于stack exchange,提问作者chippycentra
相关产品推荐
相关产品推荐

