如果任何其他列满足某些条件,如何在Pandas中删除整个组?

2024-06-16 15:50:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个df,看起来像这样:

Name  Letter  Period  Amount
123   H       PRE     11 
123   H       DURING  5
123   H       POST    100
456   H       PRE     9
456   H       DURING  50
456   H       POST    600
789   J       PRE     8
789   J       DURING  9
789   J       POST    200

目前,我正在使用这一行代码对df进行过滤,以便只包括周期为PRE且数量超过10的行:

revised_data[ (revised_data['Period'] == 'PRE' ) & (revised_data['Amount'] > 10)]

但我意识到,如果前期不满足>;10条件。所以在这种情况下,我需要删除所有456行和789行,因为它们的前期行低于10。如何调整代码以实现这一点

预期产出:

Name  Letter  Period  Amount
123   H       PRE     11 
123   H       DURING  5
123   H       POST    100

Tags: 代码namegtdfdata数量条件post
2条回答

请尝试:

df.loc[df['Name'].isin(df['Name'].loc[ (df['Period'] == 'PRE' ) & (df['Amount'] > 10)])]

印刷品:

   Name Letter  Period  Amount
0   123      H     PRE      11
1   123      H  DURING       5
2   123      H    POST     100

让我们试试:

获取一个新列/分组,它是每组字母中每个周期的一组:

df.groupby(['Letter','Period']).cumcount()

现在将df按字母和新石斑鱼分组。在每个结果组中,过滤掉大于10的任何前期。请参阅下面的解决方案

g=df.groupby(['Letter',df.groupby(['Letter','Period']).cumcount()]).filter(lambda x: ((x['Period'].eq('PRE'))&(x['Amount'].gt(10))).any())



 Name Letter  Period  Amount
0   123      H     PRE      11
1   123      H  DURING       5
2   123      H    POST     100

相关问题 更多 >