pandas groupby 到数据集中的 return 日期
pandas groupby to return dates in a dataset
有人可以告诉我如何使用 pandas groupby 在时间序列数据集中查找相似的“天数”吗?
例如,我的数据是(平均每日值)建筑物的电力和天气数据,我正在尝试查看 Pandas groupby 是否可用于在电力使用和天气到 2019 年 7 月 25 日时间戳中的唯一日期。
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/bbartling/Data/master/Whosebug_groupby_question.csv', parse_dates=True)
df['Date']=pd.to_datetime(df['Date'], utc=True)
df.set_index('Date', inplace=True)
df_daily_avg = df.resample('D').mean()
我要查找的是此数据集中与 7 月 25 日那天的平均温度最相似的前 10 天或 15 天,即:
july_25_temp_avg = df_daily_avg.loc['2019-07-25'].Temperature_C
22.047916666666676
平均建筑功率为:
july_25_power_avg = df_daily_avg.loc['2019-07-25'].kW
52.658333333333324
如果我使用 groupby,像下面这样的东西会去掉时间戳索引。
july25_most_similar = df_daily_avg.groupby(['kW','Temperature_C'],as_index=False).Temperature_C.mean()
returns 看起来最相似的日子在底部:
kW Temperature_C
0 9.316667 17.256250
1 9.433333 14.979167
2 9.616667 13.933333
3 9.683333 19.822917
4 10.116667 24.606250
... ... ...
360 58.741667 21.816667
361 61.250000 23.839583
362 61.633333 25.204167
363 62.483333 25.970833
364 63.808333 25.300000
非常感谢 return 与 7 月 25 日温度和功率最相似的 timestamp/days 的任何提示。
此外,如果可以使用更多的标准而不只是 Temperature_C
,是否可以 post 一个额外的答案来使用更多的天气数据?例如 7 月 25 日的平均功率和更多天气数据(不仅仅是 Temperature_C
),例如 Wind_Speed_m_s Relative_Humidity Temperature_C Pressure_mbar DHI_DNI
?
我想我会采用这种方法:
indx = df_daily_avg.sub(df_daily_avg.loc['2019-07-25']).abs()\
.sort_values(['Temperature_C', 'kW']).head(10).index.normalize()
df[df.index.normalize().isin(indx)]
使用 diff 并获取 abs 获得顶部,然后根据 'Temperature_C' 和 'kW' 或某种对两者进行排名的指标对天数进行排序。
然后获取这些索引,将它们规范化为一个日期,并确定原始数据框中的哪些行与检索到的索引匹配。
有人可以告诉我如何使用 pandas groupby 在时间序列数据集中查找相似的“天数”吗?
例如,我的数据是(平均每日值)建筑物的电力和天气数据,我正在尝试查看 Pandas groupby 是否可用于在电力使用和天气到 2019 年 7 月 25 日时间戳中的唯一日期。
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/bbartling/Data/master/Whosebug_groupby_question.csv', parse_dates=True)
df['Date']=pd.to_datetime(df['Date'], utc=True)
df.set_index('Date', inplace=True)
df_daily_avg = df.resample('D').mean()
我要查找的是此数据集中与 7 月 25 日那天的平均温度最相似的前 10 天或 15 天,即:
july_25_temp_avg = df_daily_avg.loc['2019-07-25'].Temperature_C
22.047916666666676
平均建筑功率为:
july_25_power_avg = df_daily_avg.loc['2019-07-25'].kW
52.658333333333324
如果我使用 groupby,像下面这样的东西会去掉时间戳索引。
july25_most_similar = df_daily_avg.groupby(['kW','Temperature_C'],as_index=False).Temperature_C.mean()
returns 看起来最相似的日子在底部:
kW Temperature_C
0 9.316667 17.256250
1 9.433333 14.979167
2 9.616667 13.933333
3 9.683333 19.822917
4 10.116667 24.606250
... ... ...
360 58.741667 21.816667
361 61.250000 23.839583
362 61.633333 25.204167
363 62.483333 25.970833
364 63.808333 25.300000
非常感谢 return 与 7 月 25 日温度和功率最相似的 timestamp/days 的任何提示。
此外,如果可以使用更多的标准而不只是 Temperature_C
,是否可以 post 一个额外的答案来使用更多的天气数据?例如 7 月 25 日的平均功率和更多天气数据(不仅仅是 Temperature_C
),例如 Wind_Speed_m_s Relative_Humidity Temperature_C Pressure_mbar DHI_DNI
?
我想我会采用这种方法:
indx = df_daily_avg.sub(df_daily_avg.loc['2019-07-25']).abs()\
.sort_values(['Temperature_C', 'kW']).head(10).index.normalize()
df[df.index.normalize().isin(indx)]
使用 diff 并获取 abs 获得顶部,然后根据 'Temperature_C' 和 'kW' 或某种对两者进行排名的指标对天数进行排序。
然后获取这些索引,将它们规范化为一个日期,并确定原始数据框中的哪些行与检索到的索引匹配。