[英]Pandas get all rows of min and max values after groupby
I have a dataframe like this: 我有一个这样的数据框:
df = pd.DataFrame({'A' : list('ababababba'),
'B' : [1, 1, 1, 2, 2, 1,1,2,1,1],
'C' : [2.0, 5., 8., 1., 2., 9.,2.0,4.0,5.0,3.0],
'D' : [10,20,30,10,20,30,20,40,50,10]})
Required: 需要:
A B C D
0 a 1 2.0 10 # a1 min keep
1 b 1 5.0 20 # b1 min
2 a 1 8.0 30 # a1 max keep
3 b 2 1.0 10
4 a 2 2.0 20
# b1 removed
# a1 remove
7 b 2 4.0 40
8 b 1 5.0 50 # b1 max keep
9 a 1 3.0 10 # a1 min keep
Related links: Min and max row from pandas groupby 相关链接: pandas groupby的最小和最大行
Max and min from two series in pandas groupby Pandas Groupby中两个系列的最大和最小
Max and Min date in pandas groupby 熊猫的最大和最小日期groupby
pandas groupby and then select a row by value of column (min,max, for example) 熊猫groupby,然后按列值(例如,最小值,最大值)选择一行
Do you want this: 你想要这个吗:
df.groupby(['A','B']).D.agg([min,max])
Output: 输出:
+---+---+-----+-----+
| | | min | max |
+---+---+-----+-----+
| A | B | | |
+---+---+-----+-----+
| a | 1 | 10 | 30 |
| | 2 | 20 | 20 |
| b | 1 | 20 | 50 |
| | 2 | 10 | 40 |
+---+---+-----+-----+
Edit: If you want all rows with either min or max, then consider transform
编辑:如果您希望所有行的最小值或最大值,则考虑
transform
groups = df.groupby(['A','B']).D
min_val = groups.transform(min)
max_val = groups.transform(max)
df[(df.D==min_val) | (df.D==max_val)]
Output: 输出:
+---+---+---+-----+----+
| | A | B | C | D |
+---+---+---+-----+----+
| 0 | a | 1 | 2.0 | 10 |
| 1 | b | 1 | 5.0 | 20 |
| 2 | a | 1 | 8.0 | 30 |
| 3 | b | 2 | 1.0 | 10 |
| 4 | a | 2 | 2.0 | 20 |
| 7 | b | 2 | 4.0 | 40 |
| 8 | b | 1 | 5.0 | 50 |
+---+---+---+-----+----+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.