如何解决计算`mean`的差异
How to solve differences in calculating `mean`
当以两种不同的方式计算 mean
时(在一个数据帧上和在同一个旋转数据帧上)我希望结果是相同的。但是,它们似乎有所不同。我错过了什么吗?
这是数据集:
import pandas as pd # pandas version is 1.3.4
df = pd.read_csv(
'https://data.rivm.nl/covid-19/COVID-19_aantallen_gemeente_per_dag.csv',
usecols = ['Date_of_publication', 'Municipality_code', 'Municipality_name', 'Province', 'Total_reported', 'Hospital_admission', 'Deceased'],
parse_dates = ['Date_of_publication'],
index_col = ['Date_of_publication'],
sep = ';'
).dropna()
df.tail()
我想计算 Total_reported
列的每个 Date_of_publication
的平均值。
方法一:
df.Total_reported.groupby(df.index).mean()
方法二:
df_pivot = pd.pivot_table(
df.reset_index(),
values='Total_reported',
index='Date_of_publication',
columns='Municipality_name'
)
df_pivot.mean(axis=1)
因为我不能 post 代码示例作为评论,所以我想利用@mozway 的回答,即在执行 pivot_table
[= 时,原因在 columns
中是重复的19=]
df = pd.DataFrame({"total":[50,10,30,15,10,5],"state":["UC","FI","DK","LM","NA","PL"]},index=["2021-11-29"]*3+["2021-11-30"]*3)
df.index.name = "date"
print(df) #No duplicated "state"
# total state
#date
#2021-11-29 50 UC
#2021-11-29 10 FI
#2021-11-29 30 DK
#2021-11-30 15 LM
#2021-11-30 10 NA
#2021-11-30 5 PL
df["total"].groupby(df.index).mean()
#2021-11-29 30.0
#2021-11-30 10.0
pd.pivot_table(df.reset_index(),index="date",values="total",columns="state").mean(axis=1)
#2021-11-29 30.0
#2021-11-30 10.0
如所见,当我们在 state
中将 PL
更改为 NA
时,它给出相同的结果 但是 即我们现在有2xNA
pivot_table
的结果已更改
df = pd.DataFrame({"total":[50,10,30,15,10,5],"state":["UC","FI","DK","LM","NA","NA"]},index=["2021-11-29"]*3+["2021-11-30"]*3) #changed the 'PL' 'NA'
#2021-11-29 30.00
#2021-11-30 11.25 #was 10.0 before
当以两种不同的方式计算 mean
时(在一个数据帧上和在同一个旋转数据帧上)我希望结果是相同的。但是,它们似乎有所不同。我错过了什么吗?
这是数据集:
import pandas as pd # pandas version is 1.3.4
df = pd.read_csv(
'https://data.rivm.nl/covid-19/COVID-19_aantallen_gemeente_per_dag.csv',
usecols = ['Date_of_publication', 'Municipality_code', 'Municipality_name', 'Province', 'Total_reported', 'Hospital_admission', 'Deceased'],
parse_dates = ['Date_of_publication'],
index_col = ['Date_of_publication'],
sep = ';'
).dropna()
df.tail()
我想计算 Total_reported
列的每个 Date_of_publication
的平均值。
方法一:
df.Total_reported.groupby(df.index).mean()
方法二:
df_pivot = pd.pivot_table(
df.reset_index(),
values='Total_reported',
index='Date_of_publication',
columns='Municipality_name'
)
df_pivot.mean(axis=1)
因为我不能 post 代码示例作为评论,所以我想利用@mozway 的回答,即在执行 pivot_table
[= 时,原因在 columns
中是重复的19=]
df = pd.DataFrame({"total":[50,10,30,15,10,5],"state":["UC","FI","DK","LM","NA","PL"]},index=["2021-11-29"]*3+["2021-11-30"]*3)
df.index.name = "date"
print(df) #No duplicated "state"
# total state
#date
#2021-11-29 50 UC
#2021-11-29 10 FI
#2021-11-29 30 DK
#2021-11-30 15 LM
#2021-11-30 10 NA
#2021-11-30 5 PL
df["total"].groupby(df.index).mean()
#2021-11-29 30.0
#2021-11-30 10.0
pd.pivot_table(df.reset_index(),index="date",values="total",columns="state").mean(axis=1)
#2021-11-29 30.0
#2021-11-30 10.0
如所见,当我们在 state
中将 PL
更改为 NA
时,它给出相同的结果 但是 即我们现在有2xNA
pivot_table
的结果已更改
df = pd.DataFrame({"total":[50,10,30,15,10,5],"state":["UC","FI","DK","LM","NA","NA"]},index=["2021-11-29"]*3+["2021-11-30"]*3) #changed the 'PL' 'NA'
#2021-11-29 30.00
#2021-11-30 11.25 #was 10.0 before