繁体   English   中英

将小时列添加到常规分钟列表中,按它分组,并在 Python 中平均数据

[英]Add hours column to regular list of minutes, group by it, and average the data in Python

我一直在寻找类似的问题,但似乎没有一个解决以下挑战。 我有一个包含分钟列表和相应值的熊猫数据框,如下所示:

minute value
0        454
1        434
2        254

该列表是一个长达一年的列表,因此计算 60 分钟 * 24 小时 * 365 天 = 525600 次观察。

我想添加一个名为小时的新列,它确实表示一天中的小时(假设 0-59 分钟是上午 12 点,60-119 分钟是凌晨 1 点,依此类推,直到第二天,序列重新开始)。

然后,一旦添加了小时列,我想按它对观测值进行分组并计算一年中每小时的平均值,最后得到一个包含 24 个观测值的数据框,每个观测值表示每个观测值的原始数据的平均值小时

使用整数和余数除法,您可以获得小时。

df['hour'] = df['minute']//60%24

如果您需要其他日期信息,使用某年(不是闰年)的 1 月 1 日作为原点并转换为datetime会很有用。 然后你可以获取很多日期属性,在这种情况下是小时。

df['hour'] = pd.to_datetime(df['minute'], unit='m', origin='2017-01-01').dt.hour

然后对于您的平均值,您将获得结果 24 行系列:

df.groupby('hour')['value'].mean()

这是一种方法:

# sample df
df = pd.DataFrame({'minute': np.arange(525600), 'value': np.arange(525600)})

# set time format
df['minute'] = pd.to_timedelta(df['minute'], unit='m')

# calculate mean
df_new = df.groupby(pd.Grouper(key='minute', freq='1H'))['value'].mean().reset_index()

虽然,您不需要明确的hour列来计算这些值,但是如果您想获得它,您可以通过以下方式进行:

df_new['hour'] = pd.to_datetime(df_new['minute']).dt.hour

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM