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' 或某种对两者进行排名的指标对天数进行排序。

然后获取这些索引,将它们规范化为一个日期,并确定原始数据框中的哪些行与检索到的索引匹配。