Python 将函数应用于按天分组的数据

Python 将函数应用于按天分组的数据,python,pandas,datetime,group-by,mean-square-error,Python,Pandas,Datetime,Group By,Mean Square Error,我的数据集如下所示: date,value1,value2 2016-01-01 00:00:00,3,0 2016-01-01 01:00:00,0,0 2016-01-01 02:00:00,0,0 2016-01-01 03:00:00,0,0 2016-01-01 04:00:00,0,0 2016-01-01 05:00:00,0,0 2016-01-01 06:00:00,0,0 2016-01-01 07:00:00,0,2 2016-01-01 08:00:00,3,11 201

我的数据集如下所示:

date,value1,value2
2016-01-01 00:00:00,3,0
2016-01-01 01:00:00,0,0
2016-01-01 02:00:00,0,0
2016-01-01 03:00:00,0,0
2016-01-01 04:00:00,0,0
2016-01-01 05:00:00,0,0
2016-01-01 06:00:00,0,0
2016-01-01 07:00:00,0,2
2016-01-01 08:00:00,3,11
2016-01-01 09:00:00,14,14
2016-01-01 10:00:00,12,13
2016-01-01 11:00:00,11,13
2016-01-01 12:00:00,11,9
2016-01-01 13:00:00,17,21
2016-01-01 14:00:00,9,22
2016-01-01 15:00:00,10,9
2016-01-01 16:00:00,11,9
2016-01-01 17:00:00,8,8
2016-01-01 18:00:00,4,2
2016-01-01 19:00:00,5,7
2016-01-01 20:00:00,5,5
2016-01-01 21:00:00,3,4
2016-01-01 22:00:00,2,4
2016-01-01 23:00:00,2,4
2016-01-02 00:00:00,0,0
2016-01-02 01:00:00,0,0
2016-01-02 02:00:00,0,0
2016-01-02 03:00:00,0,0
2016-01-02 04:00:00,0,0
2016-01-02 05:00:00,0,0
2016-01-02 06:00:00,1,0
2016-01-02 07:00:00,0,0
2016-01-02 08:00:00,0,0
2016-01-02 09:00:00,0,0
2016-01-02 10:00:00,0,0
2016-01-02 11:00:00,0,0
2016-01-02 12:00:00,0,0
2016-01-02 13:00:00,1,0
2016-01-02 14:00:00,0,0
2016-01-02 15:00:00,0,0
2016-01-02 16:00:00,0,0
2016-01-02 17:00:00,0,0
2016-01-02 18:00:00,0,0
2016-01-02 19:00:00,0,0
2016-01-02 20:00:00,1,0
2016-01-02 21:00:00,0,0
2016-01-02 22:00:00,0,0
2016-01-02 23:00:00,0,0
我想做的是每天计算value1和value2之间的rmse。 因此,基本上,我想运行函数31次(每天一次),输入将是一天中的24个条目(每小时一个) 我试着用

rmse(df.groupby([df.index.day]).mean().value1, 
    df.groupby([df.index.day]).mean().value2)
但它给了我一个值,我想要的是一个包含每天rmse的列表,比如

daily_rmse = [rmse01_01, rmse01_02, ..., rmse01_31]

您不需要继续重做
groupby
,您需要对其每个元素计算
rmse
,而不是按均值序列:

gb = df.groupby(df.index.date)
mean_by_day = gb.mean()
rmse_by_day = gb.std(ddof=0)
我怀疑您正在应用的RMSE公式完全等同于通过元素数量标准化的标准偏差(而不是元素数量-1,这是Pandas中的默认值)

您现在应该能够访问
mean_by_day.value1
std_by_day.value1
,以获得所需的值

我得到的
mean_by_day
值为

              value1    value2
2016-01-01  5.416667  6.541667
2016-01-02  0.125000  0.000000
同样,对于
rmse\u by\u day

              value1    value2
2016-01-01  5.139039  6.422481
2016-01-02  0.330719  0.000000

请注意,使用的是索引的
日期
字段,而不是
日期
,如果您的数据持续了多个月,则可能会重复该字段。

您无需继续重做
分组依据
,您需要对其每个元素计算
rmse
,而不是按均值顺序:

gb = df.groupby(df.index.date)
mean_by_day = gb.mean()
rmse_by_day = gb.std(ddof=0)
我怀疑您正在应用的RMSE公式完全等同于通过元素数量标准化的标准偏差(而不是元素数量-1,这是Pandas中的默认值)

您现在应该能够访问
mean_by_day.value1
std_by_day.value1
,以获得所需的值

我得到的
mean_by_day
值为

              value1    value2
2016-01-01  5.416667  6.541667
2016-01-02  0.125000  0.000000
同样,对于
rmse\u by\u day

              value1    value2
2016-01-01  5.139039  6.422481
2016-01-02  0.330719  0.000000

请注意,使用的是索引的
日期
字段,而不是
日期
,如果您的数据持续数月,这可能会重复。

使用
sklearn
s
均方误差

from sklearn.metrics import mean_squared_error

df.groupby(df.date.dt.date).apply(
    lambda x: mean_squared_error(x.value1, x.value2) ** .5)

date
2016-01-01    3.494043
2016-01-02    0.377964
dtype: float64

使用
sklearn
s
mean_squared_error

from sklearn.metrics import mean_squared_error

df.groupby(df.date.dt.date).apply(
    lambda x: mean_squared_error(x.value1, x.value2) ** .5)

date
2016-01-01    3.494043
2016-01-02    0.377964
dtype: float64


“你为什么打电话给
rmse
询问平均值?”MadPhysica学家我试图获得某种数据的可视化。此外,我在平均数上得到的结果比在总和上得到的结果要好……我想你不明白我的问题。为什么你要按均值序列计算rmse而不是每天计算它?哦,这就是我寻求帮助的原因。。。我不知道如何将函数应用于dayswould的序列。请提供一个Python片段来初始化示例数据帧?我不想一行一行地复制你的数据。你为什么打电话给
rmse
,意思是什么?@MadPhysicast我正试图对数据进行某种可视化。此外,我在平均数上得到的结果比在总和上得到的结果要好……我想你不明白我的问题。为什么你要按均值序列计算rmse而不是每天计算它?哦,这就是我寻求帮助的原因。。。我不知道如何将函数应用于dayswould的序列。请提供一个Python片段来初始化示例数据帧?我不想逐行复制您的数据。我正在使用sklearn的均方误差(值1,值2)并应用那里的sqrt来计算rmseI已运行您的建议,但它仍然给我一个单一的数字。。。我正在寻找一个数字列表,每天一个条目,每个条目都包含每天的rmse…那么您可以为我提供一个可运行的Python代码段来获取该数据帧吗?我对其进行了编辑,以便熊猫可以使用“,”分隔符导入该数据帧,可以吗?可以吗。我不知道你在哪里看到一个数字。我已经更新了我得到的结果。我正在使用sklearn的均方误差(值1,值2)并应用那里的sqrt来计算rmseI运行您的建议,但它仍然给我一个数字。。。我正在寻找一个数字列表,每天一个条目,每个条目都包含每天的rmse…那么您可以为我提供一个可运行的Python代码段来获取该数据帧吗?我对其进行了编辑,以便熊猫可以使用“,”分隔符导入该数据帧,可以吗?可以吗。我不知道你在哪里看到一个数字。我已经更新了我得到的结果。