首页 > 解决方案 > 在熊猫数据框中选择具有最小值和最大值的行

问题描述

我的df:

df=pd.DataFrame({'A':['Adam','Adam','Adam','Adam'],'B':[24,90,67,12]})

我只想在这个df中选择具有最小值和最大值的同名行。我可以使用以下代码做到这一点:

df_max=df[df['B']==(df.groupby(['A'])['B'].transform(max))]
df_min=df[df['B']==(df.groupby(['A'])['B'].transform(min))]
df=pd.concat([df_max,df_min])

有没有办法在一行中做到这一点?我宁愿不创建两个额外的 df 并在最后连接它们。

谢谢

标签: pandasdataframe

解决方案


使用GroupBy.aggwithDataFrameGroupBy.idxmaxDataFrameGroupBy.idxminwith reshape byDataFrame.melt和 select rows by DataFrame.loc

df1 = df.loc[df.groupby('A')['B'].agg(['idxmax','idxmin']).melt()['value']].drop_duplicates()

或者DataFrame.stack

df2 = df.loc[df.groupby('A')['B'].agg(['idxmax','idxmin']).stack()].drop_duplicates()
print (df2)
      A   B
1  Adam  90
3  Adam  12

推荐阅读