Pandas筛选仅单列非NaN值行并生成各列计数记分卡
Pandas 单动作行筛选与记分卡生成方案
核心需求
- 行筛选:数据集包含
index、id两个标识列,以及pass、shoot、flick、through-ball四个动作列,需筛选出四个动作列中仅存在1个非NaN值的行,标识列不参与非空个数统计 - 生成记分卡:完成筛选后,统计符合条件的行中各动作列的非空值出现次数,生成scorecard形式的计数统计表
示例参考
输入样例
index id pass shoot flick through-ball 22450 0123 NaN NaN NaN 600 22451 6565 NaN NaN NaN 625 22452 1212 123 NaN 454 NaN 22453 0101 NaN NaN 119 NaN 22454 1234 NaN 056 98 NaN
筛选后预期结果
index id pass shoot flick through-ball 22450 0123 NaN NaN NaN 600 22451 6565 NaN NaN NaN 625 22453 0101 NaN NaN 119 NaN
预期输出记分卡
actions unique_count pass 0 shoot 0 flick 1 through-ball 2
实现代码
import pandas as pd # 此处替换为你自己的数据加载逻辑,比如读取csv、excel等 # df = pd.read_csv("your_dataset_path.csv") # 固定动作列范围,避免标识列参与统计 action_columns = ["pass", "shoot", "flick", "through-ball"] # 逐行统计动作列非空值数量,保留非空数恰好为1的行 filtered_data = df[df[action_columns].notna().sum(axis=1) == 1] # 逐列统计筛选后数据的非空值数,整理为记分卡格式 scorecard = filtered_data[action_columns].notna().sum().reset_index() scorecard.columns = ["actions", "unique_count"]
代码逻辑说明:
- 筛选环节仅针对指定的动作列做非空判断、按行求和,完全排除标识列的影响,求和结果为1的行就是仅存在1个有效动作值的目标行
- 记分卡统计直接对筛选后的动作列做按列非空计数,重命名列名后即可匹配要求的输出格式,运行结果和示例预期完全一致
内容的提问来源于stack exchange,提问作者youngdev
相关产品推荐
相关产品推荐

