繁体   English   中英

获取一列中所有值均为 nan 的行

[英]Get rows where all values are nan in one column

我想过滤 a 列中所有值都是 nan 的名称

这是我尝试过的

full.groupby('name')['opp'].isna().any(1)

但是这会返回错误消息:

AttributeError: Cannot access callable attribute 'isna' of 'SeriesGroupBy' objects, try using the 'apply' method

这是我的数据示例

name            opp 
 f              nan
 f              nan
 g               f
 g              nan
 g              nan
 g              nan
 k              nan

期望的输出是

name     opp
f        nan
f        nan
k        nan

使用GroupBy.transformGroupBy.all测试每个组是否为True (所有NaN值)并通过boolean indexing过滤:

df = full[full['opp'].isna().groupby(full['name']).transform('all')]

另一种方法是获取包含至少一个非缺失值的所有name Series.isin过滤原始 name 列:

df = full[~full['name'].isin(full.loc[full['opp'].notna(), 'name'])]

print (df)
  name  opp
0    f  NaN
1    f  NaN
6    k  NaN

您可以使用过滤器

print(df.groupby('name').filter(lambda x: x['opp'].isna().all()))

输出

  name  opp
0    f  NaN
1    f  NaN
6    k  NaN

作为替代,你可以使用dropna + ISIN

lookup = set(df.dropna(subset=['opp']).name.values)
print(df[~df.name.isin(lookup)])

输出

  name  opp
0    f  NaN
1    f  NaN
6    k  NaN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM