在具有相同日期的行的数据框中求和并添加新列
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 的新列。
我的代码是这样开始的:它从 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 的新列。