按设备名称分组,然后取平均值

时间:2021-06-29 22:07:10

标签: python pandas pandas-groupby

我有一个非常大的 excel 文件,如下所示:

Device ID                          PM     Adjusted_Time  
c9edef390ccb2caa4f42cc05743978c8   49     1/1/18 0:00
30ca1371f6f901f5569bcf373df8d219   56     1/1/18 0:01
cad7c3d7cebf6f6e88e01c43d5dc764d   105    1/1/18 0:01
cd5796a78e2871621c34d6dcdb44d366   103    1/1/18 0:01
...

有 26 个模糊的设备 ID,每个 ID 都有全年每天每小时每分钟的数据。我的目标是首先将各个设备 ID 的数据组合在一起,以便我拥有当年每个设备的数据,然后使用 pd.groupby 的某些方面来获得 24 小时平均 PM 值。

到目前为止,我转换为日期时间:

import pandas as pd
import numpy as np

df1 = pd.read_excel('data2018-2020.xlxs'
df1['Adjusted_Time'] = pd.to_datetime(df1['Adjusted_Time'], format = '%Y/%m/%d %H:%M:%S')

现在我正在尝试使用 groupby,但我不确定接下来要做什么。 df1.pd.groupby('Device ID')["PM2.5"] 给出了相同的数据,但没有指明它是哪个设备。

Adjusted_Time
2018-01-01 05:27:40     49.715808
2018-01-01 05:28:06     56.286233
2018-01-01 05:28:25    105.642026
2018-01-01 05:28:26    103.245486
2018-01-01 05:30:41     98.328302

我的理想输出是

Device ID       PM       Adjusted_Time
device1         45        01-01-2018
device2         55        01-01-2018
device3         66        01-01-2018

对 26 个设备中的每一个,依此类推。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您可以先将修改后的格式代码转换为日期,如下所示:

df['Adjusted_Time'] = pd.to_datetime(df['Adjusted_Time'], format = '%m/%d/%y %H:%M')

请注意,如果您的日期实际上是先天而不是先是月,则可以使用:

df['Adjusted_Time'] = pd.to_datetime(df['Adjusted_Time'], format = '%d/%m/%y %H:%M')

然后 groupby() 2 个字段:Device ID 以及仅 Adjusted_Time 的日期字段:

df.groupby([df['Device ID'], df['Adjusted_Time'].dt.date])['PM'].mean().reset_index()
相关问题