pandas - 在具有相同日期的行的数据框中求和并添加新列
问题描述
我的代码以这种方式开始:它从HERE获取数据,我想提取所有包含“fascia_anagrafica”等于“20-29”的行。在意大利语中,“fascia_anagrafica”的意思是“年龄范围”。这相对简单,如下所示,我删除了一些不重要的值。
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"])
现在数据框看起来像这样:IMAGE
如您所见,对于每个日期,都有“20-29 年龄范围”,并且对于每一行,您可能会找到代表“first_dose”的值“prima_dose”。
现在的问题:如果您考虑日期“2020-12-27”,您会注意到它重复了大约 20 次(具有 20 个不同的值),因为在意大利有 21 个地区,那么这同样适用于其他日期. 不幸的是,他们并不总是 21,因为在某些地区,他们在某些日子里没有输入任何值,所以数据框不是周期性的。
我想在数据框中添加一列,该列对数据框中所有日期具有相同日期的值求和。这里有一个例子:
日期…………prima_dose…………sum_column
2020-8-9........ 1........................13 <----这个是(2020-8-9这一天的1+3+4+5)
2020-8-9........3........................8 <----这是(2020-8-10 当天的 2+5+1)
2020-8-9............. 4.......等等......
2020-8-9........ 5
2020-8-10........ 2
2020-8-10....... 5
2020-8-10....... 1
谢谢!
解决方案
如果您只想对每个日期的“prima_dose”的所有值求和并在新数据框中获取结果,您可以使用groupby.sum()
:
result = df01.groupby('data_somministrazione')['prima_dose'].sum().reset_index()
印刷:
>>> result
data_somministrazione prima_dose
0 2020-12-27 700
1 2020-12-28 171
2 2020-12-29 87
3 2020-12-30 486
4 2020-12-31 2425
.. ... ...
289 2021-10-12 11583
290 2021-10-13 12532
291 2021-10-14 15347
292 2021-10-15 13689
293 2021-10-16 9293
[294 rows x 2 columns]
这将改变您当前数据框的结构,并在每个日期返回一个唯一的行
如果要在现有数据框中添加新列而不改变其结构,则应使用groupby.transform()
:
df01['prima_dose_per_date'] = df01.groupby('data_somministrazione')['prima_dose'].transform('sum')
印刷:
>>> df01
data_somministrazione fascia_anagrafica prima_dose prima_dose_per_date
0 2020-12-27 20-29 2 700
7 2020-12-27 20-29 9 700
12 2020-12-27 20-29 60 700
17 2020-12-27 20-29 59 700
23 2020-12-27 20-29 139 700
... ... ... ...
138475 2021-10-16 20-29 533 9293
138484 2021-10-16 20-29 112 9293
138493 2021-10-16 20-29 0 9293
138502 2021-10-16 20-29 529 9293
138515 2021-10-16 20-29 0 9293
[15595 rows x 4 columns]
这将保留数据框的当前结构并返回一个新列,其中包含每个日期的 prima_dose 总和。
推荐阅读
- python - Python中的图像处理工具箱(MATLAB)
- string - Liquid:用表达式替换字符串
- thymeleaf - 使用 Spring WebFlux 和 Thymeleaf 进行重定向后获取
- mysql - docker中的巨大静态(mysql)数据库
- android - 页面固定在recyclerview中的特定帖子
- arrays - how to get all individual matches from a regex in perl?
- django - Django - 使用自定义用户模型进行身份验证返回无
- java - 画圈的动画
- mysql - MYSQL-how to insert geometry data
- c++ - c++ type alias not working when testing specialization