在pandas数据框中选择最小和最大值的行

3

我的数据框:

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

我希望在这个数据框中选择名称相同且具有最小和最大值的行。 我可以使用以下代码做到这一点:

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])

有没有一种方法可以用一行代码实现这个操作?我不想创建两个额外的数据框,并在最后将它们连接起来。
谢谢。
2个回答

3

我会在你的代码末尾添加一个注释.drop_duplicates(inplace=False),因为当特定名称仅有一条记录时,你的代码会创建两个值(一个最小值,一个最大值)。 - sygneto
@sygneto - 感谢评论,回答已被编辑。 - jezrael

1

使用 groupbyapplyloc 的解决方案,仅选择列 'B' 的最小值或最大值。

ddf = df.groupby('A').apply(lambda x : x.loc[(x['B'] == x['B'].min()) | (x['B'] == x['B'].max())]).reset_index(drop=True)

结果是:

这是结果。

      A   B
0  Adam  90
1  Adam  12

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接