Python 3.x Pandas:使用交叉表获取列和行的平均值
我有这个数据帧(至少有一个示例) 结果应该是一个表格,在这里我可以得到每天每辆车的平均值。 但我也希望得到每天和每辆车的MEA总平均值 我用的是: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
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是。每辆车每天测量几次。然后,我使用交叉表来确定每辆车每天的平均值。但我还想得到整个时间段内每辆车的平均值。此外,每天所有车辆的平均值。