如何在Pandas DataFrame中按日期求和prima_dose并新增汇总列
Pandas 按日期分组求和并映射到每行的实现方案
初始逻辑
首先导入依赖库,获取公开疫苗接种数据,筛选出年龄区间为20-29岁的所有行,删除无关字段,代码如下:
import pandas as pd import json import numpy import sympy from numpy import arange,exp from scipy.optimize import curve_fit from matplotlib import pyplot import math import decimal df = pd.read_csv('https://raw.githubusercontent.com/italia/covid19-opendata-vaccini/master/dati/somministrazioni-vaccini-latest.csv') df = df[df["fascia_anagrafica"] == "20-29"] df01=df.drop(columns= ["fornitore","area","sesso_maschile","sesso_femminile","seconda_dose","pregressa_infezione","dose_aggiuntiva","codice_NUTS1","codice_NUTS2","codice_regione_ISTAT","nome_area"])
处理后的数据每行对应20-29岁年龄组的单地区单日接种数据,其中prima_dose字段代表第一剂接种量。
现存问题
数据为意大利各地区分天上报的接种数据,同一日期会存在多条记录,对应不同地区的当日接种数据,部分日期上报记录不足21条(部分地区该日期无上报数据)。
需求
需要在dataframe中新增一列,对同一日期的所有prima_dose值求和,将该日期的总和赋值给该日期下的每一行,效果如下示例:
| Date | prima_dose | sum_column | 说明 |
|---|---|---|---|
| 2020-8-9 | 1 | 13 | 当日所有prima_dose总和1+3+4+5 |
| 2020-8-9 | 3 | 13 | 同上 |
| 2020-8-9 | 4 | 13 | 同上 |
| 2020-8-9 | 5 | 13 | 同上 |
| 2020-8-10 | 2 | 8 | 当日总和2+5+1 |
| 2020-8-10 | 5 | 8 | 同上 |
| 2020-8-10 | 1 | 8 | 同上 |
实现方法
使用Pandas的groupby分组结合transform方法即可实现,transform会保留原数据的行数,将分组后的聚合结果映射到对应分组的每一行:
# data为数据中日期字段的名称,若你修改了字段名请替换为对应值 df01['sum_column'] = df01.groupby('data')['prima_dose'].transform('sum')
执行上述代码后,df01中就会新增sum_column列,值为对应日期的所有第一剂接种量总和。
内容的提问来源于stack exchange,提问作者Fllecha
相关产品推荐
相关产品推荐

