首页 > 解决方案 > 找到第二列的所有值都是 NaN 的 pandas Dataframe 列的唯一行

问题描述

嗨,我正在努力解决以下问题:

给定一个带有列的数据框,namevariable想创建 2 个列表:

下面是一个例子

import pandas
import numpy

df = pandas.DataFrame(data=[['x',1],['y',2],['x',4],['z',numpy.nan],
                            ['x',numpy.nan],['y',3],['x',numpy.nan],['z',numpy.nan],],
                            columns=['name','variable'])
df:
  name  variable
0    x       1.0
1    y       2.0
2    x       4.0
3    z       NaN
4    x       NaN
5    y       3.0
6    x       NaN
7    z       NaN

所需的输出应该是

list_names_nan = [z]
list_names_not_nan = [x,y]

标签: pythonpandasdataframepandas-groupby

解决方案


用于Series.isna创建布尔掩码,然后Series.groupby在此掩码上使用并聚合,all最后使用此掩码m过滤nannot_nan值:

m = df['variable'].isna().groupby(df['name']).all()
nan, not_nan = m[m].index.tolist(),  m[~m].index.tolist()

结果:

['z']  # nan
['x', 'y'] # not_nan

推荐阅读