Python 3.x Pandas:使用交叉表获取列和行的平均值

Python 3.x Pandas:使用交叉表获取列和行的平均值,python-3.x,pandas,Python 3.x,Pandas,我有这个数据帧(至少有一个示例) 结果应该是一个表格,在这里我可以得到每天每辆车的平均值。 但我也希望得到每天和每辆车的MEA总平均值 我用的是: pd.crosstab([valid1low.DATE,valid1low.ROW], [valid1low.VEHICLE], values=valid1low.MEAS, aggfunc=[np.mean], margins=True) 总数看起来是平均值,但如果我用Excel来计算平均值,结果就不一样了 这可能是因为Excel使用的MEA

我有这个数据帧(至少有一个示例)

结果应该是一个表格,在这里我可以得到每天每辆车的平均值。 但我也希望得到每天和每辆车的MEA总平均值

我用的是:

pd.crosstab([valid1low.DATE,valid1low.ROW], [valid1low.VEHICLE], values=valid1low.MEAS, aggfunc=[np.mean], margins=True)
总数看起来是平均值,但如果我用Excel来计算平均值,结果就不一样了

这可能是因为Excel使用的MEAS值精度不同吗? 我怎样才能得到同样的结果呢


此表的最终用户将使用excel,因此,如果总平均值与excel不同,我会收到以下问题:)

如果我理解正确,我认为您正在寻找的是。我尝试用下面的代码重新创建一个类似的数据帧来解释

import pandas as pd
from datetime import datetime
df = pd.DataFrame()

df['DATETIME_FROM'] = pd.to_datetime(pd.DataFrame({'year': [2020,2020,2020,2020,2020,2020,2020,2020],
                   'month': [2, 2, 2, 2,2,2,2,2],
                   'day': [27, 27, 27, 27,28,28,28,28],
                    'hour':[24,26,28,30,32,34,36,38],
                    'minute':[2,4,6,8,10,12,14,16],
                     'second':[1,3,5,7,8,10,12,13]                              }))
df['DATETIME_TO'] = pd.to_datetime(pd.DataFrame({'year': [2020, 2020, 2020, 2020,2020,2020,2020,2020],
                   'month': [2, 2, 2, 2,2,2,2,2],
                   'day': [27, 27, 27, 27,28,28,28,28],
                   'hour':[25,27,29,31,33,35,37,39],
                   'minute':[3,5,7,9,11,13,15,17],
                   'second':[2,4,6,8,10,12,14,16]
                   }))
df['MEAS'] = [ 2.2844,2.5256,4.8933,2.6998,1,2,3,4]
df['ROW'] = [1,1,1,1,2,2,2,2]
df['VEHICLE'] = [26,31,37,27,65,46,45,49]
df['VEHICLE_SPEED'] =[85,69,86,86,90,91,92,93]
此代码创建的数据帧如下所示

        DATETIME_FROM         DATETIME_TO    MEAS  ROW  VEHICLE  VEHICLE_SPEED
0 2020-02-28 00:02:01 2020-02-28 01:03:02  2.2844    1       26             85
1 2020-02-28 02:04:03 2020-02-28 03:05:04  2.5256    1       31             69
2 2020-02-28 04:06:05 2020-02-28 05:07:06  4.8933    1       37             86
3 2020-02-28 06:08:07 2020-02-28 07:09:08  2.6998    1       27             86
4 2020-02-29 08:10:08 2020-02-29 09:11:10  1.0000    2       65             90
5 2020-02-29 10:12:10 2020-02-29 11:13:12  2.0000    2       46             91
6 2020-02-29 12:14:12 2020-02-29 13:15:14  3.0000    2       45             92
7 2020-02-29 14:16:13 2020-02-29 15:17:16  4.0000    2       49             93
你说过你需要得到每辆车每天的平均值和MEA每天的平均值。因此,我使用groupby函数按天分组,并在
DATETIME\u FROM
列中将日期指定为分组依据的目标。然后我使用函数得到了给定列的所有行的平均值。此函数用于汇总给定列中的值,并将其除以行数

means = df.set_index(["DATETIME_FROM"]).groupby(pd.Grouper(freq='D')).mean()
数据帧
的意思是
现在包含以下内容。来自
DATEIME\u现在是我们按此列分组的索引

                  MEAS  ROW  VEHICLE  VEHICLE_SPEED
DATETIME_FROM                                       
2020-02-27     3.100775  1.0    30.25           81.5
2020-02-28     2.500000  2.0    51.25           91.5
当你说你想要MEA和车辆的总平均值时,我假设你想要
mean
dataframe中各列值的平均值。这可以通过获取这些列的平均值来实现,然后我创建了一个名为
totals
的新数据框,并添加了这些条目

mean_meas =means['MEAS'].mean()
mean_vechicles = means['VEHICLE'].mean()
total = pd.DataFrame({'MEAN MEAS':[mean_meas],'MEAN VECHICLE':[mean_vechicles]})
“总计”数据框将包括以下内容:

   MEAN MEAS  MEAN VECHICLE
0   2.800388          40.75

我希望这有帮助,如果你有问题请告诉我

如果我理解正确,我认为你在寻找的是。我尝试用下面的代码重新创建一个类似的数据帧来解释

import pandas as pd
from datetime import datetime
df = pd.DataFrame()

df['DATETIME_FROM'] = pd.to_datetime(pd.DataFrame({'year': [2020,2020,2020,2020,2020,2020,2020,2020],
                   'month': [2, 2, 2, 2,2,2,2,2],
                   'day': [27, 27, 27, 27,28,28,28,28],
                    'hour':[24,26,28,30,32,34,36,38],
                    'minute':[2,4,6,8,10,12,14,16],
                     'second':[1,3,5,7,8,10,12,13]                              }))
df['DATETIME_TO'] = pd.to_datetime(pd.DataFrame({'year': [2020, 2020, 2020, 2020,2020,2020,2020,2020],
                   'month': [2, 2, 2, 2,2,2,2,2],
                   'day': [27, 27, 27, 27,28,28,28,28],
                   'hour':[25,27,29,31,33,35,37,39],
                   'minute':[3,5,7,9,11,13,15,17],
                   'second':[2,4,6,8,10,12,14,16]
                   }))
df['MEAS'] = [ 2.2844,2.5256,4.8933,2.6998,1,2,3,4]
df['ROW'] = [1,1,1,1,2,2,2,2]
df['VEHICLE'] = [26,31,37,27,65,46,45,49]
df['VEHICLE_SPEED'] =[85,69,86,86,90,91,92,93]
此代码创建的数据帧如下所示

        DATETIME_FROM         DATETIME_TO    MEAS  ROW  VEHICLE  VEHICLE_SPEED
0 2020-02-28 00:02:01 2020-02-28 01:03:02  2.2844    1       26             85
1 2020-02-28 02:04:03 2020-02-28 03:05:04  2.5256    1       31             69
2 2020-02-28 04:06:05 2020-02-28 05:07:06  4.8933    1       37             86
3 2020-02-28 06:08:07 2020-02-28 07:09:08  2.6998    1       27             86
4 2020-02-29 08:10:08 2020-02-29 09:11:10  1.0000    2       65             90
5 2020-02-29 10:12:10 2020-02-29 11:13:12  2.0000    2       46             91
6 2020-02-29 12:14:12 2020-02-29 13:15:14  3.0000    2       45             92
7 2020-02-29 14:16:13 2020-02-29 15:17:16  4.0000    2       49             93
你说过你需要得到每辆车每天的平均值和MEA每天的平均值。因此,我使用groupby函数按天分组,并在
DATETIME\u FROM
列中将日期指定为分组依据的目标。然后我使用函数得到了给定列的所有行的平均值。此函数用于汇总给定列中的值,并将其除以行数

means = df.set_index(["DATETIME_FROM"]).groupby(pd.Grouper(freq='D')).mean()
数据帧
的意思是
现在包含以下内容。来自
DATEIME\u现在是我们按此列分组的索引

                  MEAS  ROW  VEHICLE  VEHICLE_SPEED
DATETIME_FROM                                       
2020-02-27     3.100775  1.0    30.25           81.5
2020-02-28     2.500000  2.0    51.25           91.5
当你说你想要MEA和车辆的总平均值时,我假设你想要
mean
dataframe中各列值的平均值。这可以通过获取这些列的平均值来实现,然后我创建了一个名为
totals
的新数据框,并添加了这些条目

mean_meas =means['MEAS'].mean()
mean_vechicles = means['VEHICLE'].mean()
total = pd.DataFrame({'MEAN MEAS':[mean_meas],'MEAN VECHICLE':[mean_vechicles]})
“总计”数据框将包括以下内容:

   MEAN MEAS  MEAN VECHICLE
0   2.800388          40.75

我希望这有帮助,如果你有问题请告诉我

您好,我添加了一张图片以更好地说明,我想这张表不可读。所以我想要每辆车的平均值,一列一行。我得到的是每天所有车辆的平均值,以及同一车辆总时间的平均值,对此我仍然有点困惑,车辆列是否是车辆ID,它是否可以在多个不同的日子出现,或者它是当天车辆数量的计数?车辆是否是车辆ID是。每辆车每天测量几次。然后,我使用交叉表来确定每辆车每天的平均值。但我还想得到整个时间段内每辆车的平均值。还有,每天所有车辆的平均值。嗨,我添加了一张图片来更好地说明,我想这张表不可读。所以我想要每辆车的平均值,一列一行。我得到的是每天所有车辆的平均值,以及同一车辆总时间的平均值,对此我仍然有点困惑,车辆列是否是车辆ID,它是否可以在多个不同的日子出现,或者它是当天车辆数量的计数?车辆是否是车辆ID是。每辆车每天测量几次。然后,我使用交叉表来确定每辆车每天的平均值。但我还想得到整个时间段内每辆车的平均值。此外,每天所有车辆的平均值。