如果任何其他列符合特定标准,如何将整个组放入熊猫中



我有一个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)]

然而,我意识到的是,如果即使只是PRE周期也不满足>10条件。所以在这种情况下,我需要删除所有456行和789行,因为它们的PRE周期行低于10。如何调整我的代码来实现这一点?

预期输出:

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

请尝试:

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的PRE周期。请参阅下面的解决方案。

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

最新更新