如果列中至少有一个特定值,则删除所有行

id如果列中至少有一个特定值,我正在尝试用 Python 编写代码以删除某个特定值的所有观察值worked。想象一下,如果您想知道哪位员工在这一年中从未缺席,那么他/她每天都会因出现而获得奖金。那么,如果有人缺席 1 天或 50 天也是一样,因为那个人当年没有完美的现在主义。


假设df看起来像这样(df):


  id worked

1 A  yes

2 A  no

3 B  yes

4 B  yes

5 C  no

6 C  no

7 D  yes

8 D  yes

理想的新 df 应如下所示(df2):


  id worked

3 B  yes

4 B  yes

7 D  yes

8 D  yes

df2 = df1[df1.worked == 'yes']

不做这项工作,因为它会删除idC 但它仍会显示id至少 1 天没有出现的 A 的 1 行。


我想确保如果我这样做


df2.id.unique()

只有 B 和 D 获得奖金,而不是 A、B 和 D。


为了清楚起见,我需要获取 df2 而不是unique(). 那只是为了举例说明 df2 的可能用途。


慕尼黑的夜晚无繁华
浏览 88回答 2
2回答

斯蒂芬大帝

这是一个例子。但是,我需要添加一个辅助列:df['aux_col'] = df.groupby('id')['worked'].transform('nunique')final_df = df[(df['aux_col'] == 1) & (df['worked'] == 'yes')]final_df = final_df.drop(columns='aux_col')print(final_df)输出:  id worked2  B    yes3  B    yes6  D    yes7  D    yes如您所述进行双重检查:print(final_df['id'].unique())回报:['B' 'D']

神不在的星期二

您可以尝试df.duplicated:>>> df2 = df1[df1.duplicated(keep=False)]>>> df2[df2.worked == 'yes']  id worked3  B    yes4  B    yes7  D    yes8  D    yes或使用逻辑与 ( &):>>> f1[df1.duplicated(keep=False) & (df1.worked == 'yes')]  id worked3  B    yes4  B    yes7  D    yes8  D    yes
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python