pandas - 在熊猫数据框中选择具有最小值和最大值的行
问题描述
我的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 并在最后连接它们。
谢谢
解决方案
使用GroupBy.agg
withDataFrameGroupBy.idxmax
和DataFrameGroupBy.idxmin
with reshape byDataFrame.melt
和 select rows by DataFrame.loc
:
df1 = df.loc[df.groupby('A')['B'].agg(['idxmax','idxmin']).melt()['value']].drop_duplicates()
df2 = df.loc[df.groupby('A')['B'].agg(['idxmax','idxmin']).stack()].drop_duplicates()
print (df2)
A B
1 Adam 90
3 Adam 12
推荐阅读
- java - android单元测试mockito不能正常工作
- angular - Angular 6 - 英雄之旅 - 防止添加现有名称的英雄
- cordova - ios12、xcode10、cordova 7.1、cordova-ios 4.5.4 在键盘关闭时的滚动视图问题
- netty - 通过事件总线发送池对象
- dart - Flutter - 在单独的类中委托文本字段
- r - 无法在 RedHat Linux 上安装 R
- csla - CLSA AddChild 默认值
- java - 使用 AsyncHttp 在请求中添加文件
- powershell - Windows - 通过从机器 A 上的机器 B 执行的 Powershell 将文件从机器 A 复制到机器 B
- pyspark - PySpark 中的 DataFrame 转换