<p>编辑:请参见Serge de Gosson de Varnnes的第二个示例。这正是我想要的</p>
<p>我相信我已经找到了解决问题的办法。我犯的第一个错误是没有按小时创建索引。我相信阿米特·库马尔(Amit Kumar)是在谈论这件事,但当时我不太明白他的意思。Serge de Gosson de Varnnes也为他的例子中的数据建立了一个索引</p>
<p>我将使用Serge de Gosson de Varnnes的</strong>我的数据插入示例,因此任何发现这一点的人都可以立即使用示例并检查输出:</p>
<pre><code>import pandas as pd
d ={'datetime' :['2020-10-27 00:00:05','2020-10-27 00:00:10','2020-10-27 00:00:15','2020-10-27 01:00:05','2020-10-27 01:00:10','2020-10-27 01:00:15','2020-10-27 00:00:05','2020-10-27 00:00:10','2020-10-27 00:00:15','2020-10-27 01:00:05','2020-10-27 01:00:10','2020-10-27 01:00:15'],
'hostname':['server001','server001','server001','server001','server001','server001','server002','server002','server002','server002','server002','server002'],
'sessions':[ 22,25,21 ,30,30,35,15,10, 11,19,22,18]}
df = pd.DataFrame(data=d)
df['datetime'] = pd.to_datetime(df['datetime'])
df = df.set_index(pd.DatetimeIndex(df['datetime']))
hour_index = df.index.hour
df = groupby([hour_index, 'hostname'])['sessions'].mean().round(0).astype(int)
with pd.option_context(
'display.max_rows',
None,
'display.max_columns',
None
):
print(df)
</code></pre>
<p>此处应用round和astype方法将整数四舍五入到最接近的整数。这不是我以前指定的东西,因为我已经知道如何处理它,但为了完整性,我将把它放在这里</p>
<p>这里的with语句允许打印完整的数据帧(请注意大数据帧,因为一次在屏幕上打印的数据可能很多)</p>
<p>输出:</p>
<pre><code>datetime hostname
0 server001 23
server002 12
1 server001 32
server002 20
</code></pre>
<p>这里唯一的改进是将小时索引设置为带有时间戳的时钟格式</p>
<p>另一个问题没有解决,但超出了这个特定问题的范围,即datetime列中是否有多天。我将在每天每个数据帧中分离我的数据帧来处理这个问题。但如果我能找到更好的方法来处理每一天,我会把它加入到我的解决方案中</p>