Python Pandas Groupby-如果多行超过另一列中的值,则选择一列中值最高的行

Python Pandas Groupby-如果多行超过另一列中的值,则选择一列中值最高的行,python,pandas,Python,Pandas,此操作按两列对我的数据帧进行分组,然后返回ColumnC中值最高的行: df2 = df.loc[df.groupby(['columnA', 'columnB'], sort=False)['columnC'].idxmax()] 相反,对于每组中ColumnC>100的所有行,我希望取ColumnD中值最高的行 我该怎么做 编辑: 下面@Code Different的注释基本上就是我要寻找的,但我不想排除没有任何行具有ColumnC>100的组,在这些情况下,我希望在ColumnC中具有最

此操作按两列对我的数据帧进行分组,然后返回
ColumnC
中值最高的行:

df2 = df.loc[df.groupby(['columnA', 'columnB'], sort=False)['columnC'].idxmax()]
相反,对于每组中
ColumnC>100
的所有行,我希望取
ColumnD
中值最高的行

我该怎么做

编辑:


下面@Code Different的注释基本上就是我要寻找的,但我不想排除没有任何行具有ColumnC>100的组,在这些情况下,我希望在ColumnC中具有最高值的行,如上面的示例所示

通常我们将数据分成两部分,然后根据条件过滤它们

df=sort_values('columnD')

df1 = df[df['columnC'] > 100]].drop_duplicates(['columnA', 'columnB'],keep='last')
df2 = df.drop_duplicates(['columnA', 'columnB'],keep='last')

Yourdf=pd.concat([df1,df2]).drop_duplicates(['columnA', 'columnB'])

idx=df[df['columnC']>100].groupby(['columnA','columnB'])['columnD'].idxmax();df.loc[idx]
?这与我正在寻找的非常接近,但我不想排除任何行都没有
ColumnC>100
的组,我相信您的解决方案是这样的。那么您希望为这些组输出什么,n/a?好问题,抱歉,不清楚-在这种情况下,只需返回
ColumnC
中具有最大值的行。这将返回与此行相同的df
df2=df.loc[df.groupby(['columnA','columnB'],sort=False)['ColumnC'].idxmax()]