让我们考虑一个 DataFrame,它在 2010 年 1 月的每一天包含 1 行 2 个值:
date_range = pd.date_range(dt(2010,1,1), dt(2010,1,31), freq='1D')
df = pd.DataFrame(data = np.random.rand(len(date_range),2), index = date_range)
我将该 DataFrame 拆分为 5 个 DataFrame 的列表,每个 DataFrame 都包含原始数据的 1 周数据:df_weeks = [g for n, g in df.groupby(pd.TimeGrouper('W'))]
如果我输入df.groupby(pd.TimeGrouper('W')).groups
我可以看到一个字典解释如何分组:
{Timestamp('2010-01-03 00:00:00', freq='W-SUN'): 3,
Timestamp('2010-01-10 00:00:00', freq='W-SUN'): 10,
Timestamp('2010-01-17 00:00:00', freq='W-SUN'): 17,
Timestamp('2010-01-24 00:00:00', freq='W-SUN'): 24,
Timestamp('2010-01-31 00:00:00', freq='W-SUN'): 31}
让我们考虑另一个具有稀疏数据但与第一个重叠的 TimeSeries:
observations = pd.DataFrame(data =np.random.rand(5,2), index = (dt(2010,1,12), dt(2010,1,18), dt(2010,1,20), dt(2010,1,22), dt(2010,1,28)))
如果我运行相同的代码obs_weeks = [g for n, g in observations.groupby(pd.TimeGrouper('W'))]
,显然它会在列表中返回更少的 DataFrame,因为数据覆盖的范围更小。observations.groupby(pd.TimeGrouper('W')).groups
返回:
{Timestamp('2010-01-17 00:00:00', freq='W-SUN'): 1,
Timestamp('2010-01-24 00:00:00', freq='W-SUN'): 4,
Timestamp('2010-01-31 00:00:00', freq='W-SUN'): 5}
但有没有办法重用第一个 DataFrame.GroupBy 的组将其应用到第二个?即,这意味着在特定情况下最终会出现一个变量obs_weeks
包含 5 个数据帧,跨越相同的时间范围df_weeks
,其中 2 个是空的?