如何按两列分组DataFrame并新增第三列的最小、最大值列
按多列分组并新增分组最值列
原始数据
import pandas as pd a = [{'column_1': 'A', 'column_2': 'B', 'column_3': 3}, {'column_1': 'A', 'column_2': 'B', 'column_3': 8}, {'column_1': 'Y', 'column_2': 'C', 'column_3': 2}, {'column_1': 'Y', 'column_2': 'C', 'column_3': 10}, {'column_1': 'Y', 'column_2': 'C', 'column_3': 6}, {'column_1': 'F', 'column_2': 'S', 'column_3': 11}, {'column_1': 'F', 'column_2': 'S', 'column_3': 18}, {'column_1': 'F', 'column_2': 'S', 'column_3': 5}, {'column_1': 'F', 'column_2': 'S', 'column_3': 20}] df = pd.DataFrame(a)
解决方案
使用groupby按column_1和column_2分组,通过transform方法计算每组column_3的最小/最大值,直接赋值给新列即可:
# 新增min列,存储分组后column_3的最小值 df['min'] = df.groupby(['column_1', 'column_2'])['column_3'].transform('min') # 新增max列,存储分组后column_3的最大值 df['max'] = df.groupby(['column_1', 'column_2'])['column_3'].transform('max')
结果展示
执行后得到的DataFrame如下:
| column_1 | column_2 | column_3 | min | max | |
|---|---|---|---|---|---|
| 0 | A | B | 3 | 3 | 8 |
| 1 | A | B | 8 | 3 | 8 |
| 2 | Y | C | 2 | 2 | 10 |
| 3 | Y | C | 10 | 2 | 10 |
| 4 | Y | C | 6 | 2 | 10 |
| 5 | F | S | 11 | 5 | 20 |
| 6 | F | S | 18 | 5 | 20 |
| 7 | F | S | 5 | 5 | 20 |
| 8 | F | S | 20 | 5 | 20 |
内容的提问来源于stack exchange,提问作者LiAfe
相关产品推荐
相关产品推荐

