【发布时间】:2018-04-05 21:18:14
【问题描述】:
我有一个节点列表(其中大约 2300 个),其中包含大约一年的每小时价格数据。我有一个脚本,对于每个节点,循环遍历一天中的时间以创建 4 小时的追踪平均值,然后按月和小时对平均值进行分组。最后,对一个月中的这些时间进行平均,得出每个月的典型价格日。我想知道是否有更快的方法来做到这一点,因为我所拥有的似乎需要大量时间(大约一个小时)。我还将数据框保存为 csv 文件以供以后可视化(这不是慢速部分)。
df (before anything is done to it)
Price_Node_Name Local_Datetime_HourEnding Price Irrelevant_column
0 My-node 2016-08-17 01:00:00 20.95 EST
1 My-node 2016-08-17 02:00:00 21.45 EST
2 My-node 2016-08-17 03:00:00 25.60 EST
df_node (after the groupby as it looks going to csv)
Month Hour MA
1 0 23.55
1 1 23.45
1 2 21.63
for node in node_names:
df_node = df[df['Price_Node_Name'] == node]
df_node['MA'] = df_node['Price'].rolling(4).mean()
df_node = df_node.groupby([df_node['Local_Datetime_HourEnding'].dt.month,
df_node['Local_Datetime_HourEnding'].dt.hour]).mean()
df_node.to_csv('%s_rollingavg.csv' % node)
我收到一个关于 SetWithCopy 的弱错误警告我,但我还没有完全弄清楚如何在此处使用 .loc,因为列 ['MA'] 不存在,直到我在此 sn-p 和任何我能想到的方法是事先创建它并填充它似乎比我拥有的要慢。虽然可能是完全错误的。任何帮助都会很棒。
python 3.6
【问题讨论】:
-
显示一些数据的剪切和粘贴如何?
-
我在滚动平均和每小时平均之前和之后添加了几行示例数据。
-
我认为大多数使用
Pandas的人都会同意“如果你使用循环,那么你做错了”的说法。至少,这种情绪对我学习在Pandas中找到更有效的解决方案非常有帮助。