如何统计DataFrame指定列中各唯一值所在的行数?
解决方案
假设你的数据已通过pandas加载为DataFrame df,可通过以下步骤实现需求:
核心思路
- 筛选出需要统计的目标列(Type1、Type2、Type3、Type4)
- 对每一行去重,确保同一行内的重复值仅被计为一次
- 统计每个值(包括NA)被多少行包含,最终整理为目标格式
代码实现
import pandas as pd import numpy as np # 模拟输入的DataFrame(包含未列出的其他列) data = { 'Case': [1, 2, 3, 4, 5], 'Type1': ['A', 'B', 'C', 'D', 'E'], 'Type2': ['B', 'A', 'D', np.nan, 'B'], 'Type3': ['C', 'D', 'A', np.nan, 'A'], 'Type4': [np.nan, np.nan, np.nan, 'A', np.nan], 'OtherColumn': ['val1', 'val2', 'val3', 'val4', 'val5'] } df = pd.DataFrame(data) # 1. 选中需要统计的列 target_cols = ['Type1', 'Type2', 'Type3', 'Type4'] type_subset = df[target_cols] # 2. 每行去重后转置,统计各值出现的行数(保留NA) result = (type_subset.apply(lambda row: pd.Series(row.unique()), axis=1) .stack() .value_counts(dropna=False) .reset_index()) # 3. 重命名列匹配期望格式 result.columns = ['Type', 'Number of Cases'] # 查看结果 print(result)
输出结果
| Type | Number of Cases |
|---|---|
| A | 5 |
| NaN | 5 |
| B | 3 |
| D | 3 |
| C | 2 |
| E | 1 |
(注:输出中的NaN会在实际显示中对应你期望的NA)
内容的提问来源于stack exchange,提问作者grapeporcupine
相关产品推荐
相关产品推荐

