python - Pandas GroupBy 并选择特定列中具有最小值的行
问题描述
我按 A 列对我的数据集进行分组,然后想取 B 列中的最小值和 C 列中的相应值。
data = pd.DataFrame({'A': [1, 2], 'B':[ 2, 4], 'C':[10, 4]})
data
A B C
0 1 4 3
1 1 5 4
2 1 2 10
3 2 7 2
4 2 4 4
5 2 6 6
我想得到:
A B C
0 1 2 10
1 2 4 4
目前,我按 A 分组,并创建一个值来指示我将在数据集中保留的行:
a = data.groupby('A').min()
a['A'] = a.index
to_keep = [str(x[0]) + str(x[1]) for x in a[['A', 'B']].values]
data['id'] = data['A'].astype(str) + data['B'].astype('str')
data[data['id'].isin(to_keep)]
我确信有一种更直接的方法可以做到这一点。我在这里看到了许多使用多索引的答案,但我想在不向我的数据框添加多索引的情况下这样做。谢谢您的帮助。
解决方案
我觉得你想多了。只需使用groupby
和idxmin
:
df.loc[df.groupby('A').B.idxmin()]
A B C
2 1 2 10
4 2 4 4
df.loc[df.groupby('A').B.idxmin()].reset_index(drop=True)
A B C
0 1 2 10
1 2 4 4
推荐阅读
- java - optaplanner 如何动态添加或编辑规则
- html - CSS 选择元素,它具有以下元素
- php - WP Crontrol:在您的站点上产生对 WP-Cron 系统的调用时出现问题
- swift - 如何在导航视图控制器中引用当前视图
- vb.net - 如何选择实体列表并获得它们的属性?
- php - PHP将结果循环到数组中
- regex - 如何找到特殊字符 { 和 \ 之间的模式?
- shutdown - 尝试关闭项目时出现 Lien 连接问题
- amazon-web-services - 尝试在 AWS 的巴林(me-south-1)区域设置代码管道
- php - get_post_meta 没有在 Wordpress functions.php 中打印/公开分配的自定义字段