在具有相同日期的行的数据框中求和并添加新列

SUM in dataframe of rows that has the same date and ADD new column

我的代码是这样开始的:它从 HERE 中获取数据,我想提取所有包含等于“20-29”的“fascia_anagrafica”的行。在意大利语中,“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 年龄范围”,并且对于每一行,您都可以找到值“prima_dose”,它代表“first_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]

这将更改您当前数据框的结构,并且return每个日期一个唯一的行


如果你想在现有数据框中添加一个新列而不改变它的结构,你应该使用 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]

这将保留您的数据框的当前结构和 return 每个日期总和为 prima_dose 的新列。