为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑的夜晚无繁华 2022-07-26 16:43:48
id如果列中至少有一个特定值,我正在尝试用 Python 编写代码以删除某个特定值的所有观察值worked。想象一下,如果您想知道哪位员工在这一年中从未缺席,那么他/她每天都会因出现而获得奖金。那么,如果有人缺席 1 天或 50 天也是一样,因为那个人当年没有完美的现在主义。假设df看起来像这样(df):  id worked1 A  yes2 A  no3 B  yes4 B  yes5 C  no6 C  no7 D  yes8 D  yes理想的新 df 应如下所示(df2):  id worked3 B  yes4 B  yes7 D  yes8 D  yesdf2 = df1[df1.worked == 'yes']不做这项工作,因为它会删除idC 但它仍会显示id至少 1 天没有出现的 A 的 1 行。我想确保如果我这样做df2.id.unique()只有 B 和 D 获得奖金,而不是 A、B 和 D。为了清楚起见,我需要获取 df2 而不是unique(). 那只是为了举例说明 df2 的可能用途。
查看完整描述

2 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

这是一个例子。但是,我需要添加一个辅助列:


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 worked

2  B    yes

3  B    yes

6  D    yes

7  D    yes

如您所述进行双重检查:


print(final_df['id'].unique())

回报:


['B' 'D']


查看完整回答
反对 回复 2022-07-26
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

您可以尝试df.duplicated:


>>> df2 = df1[df1.duplicated(keep=False)]

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

  id worked

3  B    yes

4  B    yes

7  D    yes

8  D    yes

或使用逻辑与 ( &):


>>> f1[df1.duplicated(keep=False) & (df1.worked == 'yes')]

  id worked

3  B    yes

4  B    yes

7  D    yes

8  D    yes


查看完整回答
反对 回复 2022-07-26
  • 2 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信