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']
神不在的星期二
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
添加回答
举报
0/150
提交
取消