我有一个包含 2 列的数据框:“年龄”和“姓名”。看起来像这样(在记事本中打开时):
,age,name
0,18,Bill
1,22,Harry
2,Nan,Bill
4,5,William
(第一列是索引)
我需要删除年龄列中包含 Nan 的所有行,并删除名称列中具有相同名称的所有行。例如,在我的数据框的片段中,我想删除带有 Bill 的两行,因为其中一个年龄包含 Nan
目前我有这个:
df_no_dups = dp[dp.isfinite(dp['age'])]
这是第一部分,但我坚持删除与包含 Nan 的行同名的其他行
任何帮助都会很棒
请您参考如下方法:
按 boolean indexing 过滤使用 transform 创建的 bool 掩码测试是否 all每组值没有缺失值:
df1 = df[df['age'].notnull().groupby(df['name']).transform('all')]
或者检查缺失值,测试每组是否至少有一个 True,最后通过 ~ 反转 bool 掩码:
df1 = df[~df['age'].isnull().groupby(df['name']).transform('any')]
print (df1)
age name
1 22.0 Harry
3 5.0 William
详细信息:
print (df['age'].notnull())
0 True
1 True
2 False
3 True
Name: age, dtype: bool
print (df['age'].notnull().groupby(df['name']).transform('all'))
0 False
1 True
2 False
3 True
Name: age, dtype: bool
