按指定列分组并按列求和,实现每组一行的DataFrame处理
解决Pandas按多列分组并对药物列求和的问题
原始DataFrame结构
| ID | conception_date | birth_date | med_1 | med_2 | med_3 | med_4 | ... | med_n |
|---|---|---|---|---|---|---|---|---|
| A | xxxx | xxxx | 1 | 0 | 0 | 0 | ... | |
| A | xxxx | xxxx | 0 | 1 | 0 | 0 | ... | |
| A | xxxx | xxxx | 0 | 0 | 1 | 0 | ... | |
| B | xxxx | xxxx | 1 | 0 | 0 | 0 | ... | |
| B | xxxx | xxxx | 0 | 1 | 0 | 0 | ... | |
| B | xxxx | xxxx | 0 | 0 | 1 | 0 | ... | |
| B | xxxx | xxxx | 0 | 0 | 0 | 1 | ... | |
| C | xxxx | xxxx | 1 | 0 | 0 | 0 | ... | |
| C | xxxx | xxxx | 0 | 0 | 0 | 1 | ... |
需求说明
按ID、conception_date、birth_date三列分组,将每个分组内的所有药物列(med_1至med_n)按列求和,最终每个分组对应一行数据。
解决方案
使用Pandas的groupby方法指定分组键,再调用sum()对数值列求和即可,核心代码如下:
import pandas as pd # 假设你的DataFrame名为df result_df = df.groupby(['ID', 'conception_date', 'birth_date']).sum().reset_index()
代码解释
- 分组键指定:
groupby(['ID', 'conception_date', 'birth_date'])会将这三列值完全相同的行归为同一组。 - 求和操作:
sum()会自动对分组内所有数值类型的列(即所有med_*列)执行求和,分组列会作为结果的索引。 - 重置索引:
reset_index()将分组列从索引转回普通列,得到符合需求的结构化结果。
处理后DataFrame结构
| ID | conception_date | birth_date | med_1 | med_2 | med_3 | med_4 | ... | med_n |
|---|---|---|---|---|---|---|---|---|
| A | xxxx | xxxx | 1 | 1 | 1 | 0 | ... | |
| B | xxxx | xxxx | 1 | 1 | 1 | 1 | ... | |
| C | xxxx | xxxx | 1 | 0 | 0 | 1 | ... |
内容的提问来源于stack exchange,提问作者Youknowme
相关产品推荐
相关产品推荐

