python - 如何计算每组的非空列?
问题描述
我从如下所示的原始数据开始:
Case Final Pre Post
1 A Z X
Z V
2 B
Y
3 A Z Y
Z U
W
4 C W
Z
5 C X Z
X
Z
然后做了一个前向填充:
df['Case'] = df['Case'].ffill()
像这样:
Case Final Pre Post
1 A Z X
1 Z NaN V
2 B NaN NaN
2 Y NaN NaN
3 A Z Y
3 Z NaN U
3 W NaN NaN
4 C W NaN
4 Z NaN NaN
5 C X Z
5 X NaN NaN
5 Z NaN NaN
我想要的是计算每列中该列不为空的案例数:
Case: 5
Final: 5
Pre: 4
Post: 3
输出说明:
1- 按第一列分组Case
。
2-即使列的一个值不为空(包括Case
列本身),然后 count++(将非空计数加 1)。
解决方案
利用:
s = df.notna().groupby(df['Case']).any().sum()
#oldier pandas versions
s = df.notnull().groupby(df['Case']).any().sum()
print (s)
Case 5
Final 5
Pre 4
Post 3
dtype: int64
详情:
首先通过以下方式检查非缺失值DataFrame.notna
:
print (df.notna())
Case Final Pre Post
0 True True True True
1 True True False True
2 True True False False
3 True True False False
4 True True True True
5 True True False True
6 True True False False
7 True True True False
8 True True False False
9 True True True True
10 True True False False
11 True True False False
Case
然后按列聚合GroupBy.any
:
print (df.notnull().groupby(df['Case']).any())
Case Final Pre Post
Case
1 True True True True
2 True True False False
3 True True True True
4 True True True False
5 True True True True
以及 count s 进程的最后一个sum
值,例如.True
1
推荐阅读
- python - 如何避免使用 iloc 或对索引号 pandas 进行硬编码以将单个数据帧中的行动态提取到多个子集中?
- java - java中的setter和getter
- javascript - 安装和使用 React 组件
- powerbi - 如何在 power bi 的列中为特定值设置不同的格式?
- javascript - 所有承诺的自定义`catch`
- javascript - 启用 CSP 时要避免哪些与 eval() 相关的函数?
- powershell - 用文件名替换多个文件中的字符串
- amazon-dynamodb - DynamoDB 预置的写入容量单位过于频繁且意外超出
- javascript - “TypeError: Cannot read property 'then' of undefined”由速记箭头函数形式引起
- express - 在 express 中使用 Pipe 后保留用户 IP