我正在尝试用 Python 编写一段代码,如果 worked
列中至少有一个特定值,则删除某个 id
的所有观察结果。想象一下,如果您想知道哪位员工在这一年中从未缺席过,那么他/她每天都会获得奖励。那么,如果有人缺席 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']
不会执行此操作,因为它会删除 id
C,但仍会显示 1 行 id
A,该人至少 1 天没有出现。
我想确保如果我这样做
df2.id.unique()
只有 B 和 D 获得奖金,而不是 A、B 和 D。
为了清楚起见,我需要获取 df2 而不是 unique()
列表。这只是为了举例说明 df2 的可能用途。
最佳答案
这是一个例子。但是我需要添加一个辅助列:
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']
关于python - 如果列中至少有一个特定值,则删除所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60191342/