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