我有一个数据帧:

import pandas as pd

d = {
'Country': ["Austria", "Austria", "Belgium", "USA", "USA", "USA", "USA"], 
'Number2020': [15, None, 18, 20, 22, None,  30],
'Number2021': [20, 25, 18, None, None, None, 32],    
}

df = pd.DataFrame(data=d)
df

    Country   Number2020    Number2021
0   Austria   15.0          20.0
1   Austria   NaN           25.0
2   Belgium   18.0          18.0
3   USA       20.0          NaN
4   USA       22.0          NaN
5   USA       NaN           NaN
6   USA       30.0          32.0

我想总结每个国家的nan值.例如.

    Country       Count_nans
    Austria       1
    
    USA           4

我已经过滤了数据帧,只留下带有NaN的行.

df_nan = df[df.Number2021.isna() | df.Number2020.isna()]

    Country   Number2020    Number2021
1   Austria   NaN           25.0
3   USA       20.0          NaN
4   USA       22.0          NaN
5   USA       NaN           NaN

看起来像是一个分组操作?我试过这个.

nasum2021 = df_nan['Number2021'].isna().sum()

df_nan['countNames2021'] = df_nan.groupby(['Number2021'])['Number2021'].transform('count').fillna(nasum2021)
df_nan

它给了我1个nan代表奥地利,但给了3个代表美国,而它应该是4.所以这是不对的.

推荐答案

处理不带Country的所有列的解决方案-首先将其转换为索引,测试缺失值并聚合sum,最后求和列:

s = df.set_index('Country').isna().groupby('Country').sum().sum(axis=1)
print (s)
Country
Austria    1
Belgium    0
USA        4
dtype: int64

如果需要删除0个值,则添加boolean indexing:

s = s[s.ne(0)]

Python-3.x相关问答推荐

Pandas groupby基于索引的连续列值相等

在多个测试中维护和报告变量

具有多个值的极轴旋转和熔化/取消旋转(反转旋转)操作(Pandas 堆叠/取消堆叠交替/UDF覆盖)

如何将python点击参数设置为与选项回调不同的参数的别名?

如何计算累积几何平均数?

msg-seviri l1.5本机文件

!date 的命令无法从 jupyter notebook 运行

使用 OpenCV 从图像中减go 一条线

使用 RANSAC 在激光雷达点云中查找电力线

为什么 f-strings 比 str() 更快地解析值?

Pandas 的 EMA 与股票的 EMA 不匹配?

tkinter TclError:错误的文件类型使用 askopenfilename

python 3的蓝牙库

Python:&= 运算符

如何区分文件之类的对象和文件路径之类的对象

为什么 Python 不能识别我的 utf-8 编码源文件?

python - Pandas - Dataframe.set_index - 如何保留旧的索引列

使用 python 3.0 的 Numpy

字典理解中的操作顺序

Pylint 中的模块PyQt5.QtWidgets错误中没有名称QApplication