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
withall
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
withall
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。您还可以使用直接读取数据,而无需将数据写入文件并读取:)