Pandas 如何选择具有相同id且在另一列中缺少所有值的行

Pandas 如何选择具有相同id且在另一列中缺少所有值的行,pandas,dataframe,pandas-groupby,Pandas,Dataframe,Pandas Groupby,我有以下数据帧: ID col_1 1 NaN 2 NaN 3 4.0 2 NaN 2 NaN 3 NaN 3 3.0 1 NaN 我需要以下输出: ID col_1 1 NaN 1 NaN 2 NaN 2 NaN 2 NaN 如何在pandas中执行此操作您可以使用isna创建布尔掩码,然后使用all将此掩码按ID和transform分组,然后您可以借助此掩码筛选行: mask = df['col_1'].i

我有以下数据帧:

ID  col_1
1    NaN
2    NaN
3    4.0
2    NaN
2    NaN
3    NaN
3    3.0
1    NaN
我需要以下输出:

ID  col_1
1    NaN
1    NaN
2    NaN
2    NaN
2    NaN

如何在pandas中执行此操作您可以使用
isna
创建布尔掩码,然后使用
all
将此掩码按
ID
transform
分组,然后您可以借助此掩码筛选行:

mask = df['col_1'].isna().groupby(df['ID']).transform('all')
df[mask].sort_values('ID')
或者,您可以使用
groupby
+
filter
筛选出满足以下条件的组:
col_1
中的所有值均为
NaN
,但此方法应比上述方法慢:

df.groupby('ID').filter(lambda g: g['col_1'].isna().all()).sort_values('ID')


您可以使用
isna
创建一个布尔掩码,然后使用
all
ID
transform
对该掩码进行分组,然后您可以借助该掩码筛选行:

mask = df['col_1'].isna().groupby(df['ID']).transform('all')
df[mask].sort_values('ID')
或者,您可以使用
groupby
+
filter
筛选出满足以下条件的组:
col_1
中的所有值均为
NaN
,但此方法应比上述方法慢:

df.groupby('ID').filter(lambda g: g['col_1'].isna().all()).sort_values('ID')


让我们在
groupby
with
all

s = df['col_1'].isna().groupby(df['ID']).all()
df = df.loc[df.ID.isin(s[s].index.tolist())]
df
Out[73]: 
   ID  col_1
0   1    NaN
1   2    NaN
3   2    NaN
4   2    NaN
7   1    NaN

让我们在
groupby
with
all

s = df['col_1'].isna().groupby(df['ID']).all()
df = df.loc[df.ID.isin(s[s].index.tolist())]
df
Out[73]: 
   ID  col_1
0   1    NaN
1   2    NaN
3   2    NaN
4   2    NaN
7   1    NaN
我认为我们可以简单地去掉空值


我认为我们可以简单地去掉空值。

这不会检查组中的所有值是否为nan。也可以使用直接读取数据,而无需将数据写入文件并读取:)这不会检查组中的所有值是否为nan。您还可以使用直接读取数据,而无需将数据写入文件并读取:)