Я не думаю , что вы хотите сделать повторную выборку, как показывает Шиджит. Я думаю, что вы хотите разные кадры для каждой недели. ИМО, вы хотите использовать для этого groupby ( doc ). Функцию Pandas Groupby можно использовать для разделения данных в кадре данных по столбцам или индексам. Метод возвращает объект groupby для панд, который можно использовать для выполнения операций над группами перед их объединением.
Во фрагменте кода я сначала создаю столбец для группировки данных (то есть столбец «недели»). Чем я группирую данные по столбцу недель. Это создает объект groupby, который, помимо прочего, состоит из словаря, который имеет уникальные значения столбца «недели» в качестве ключей, и списка индексов информационного кадра, которые имеют то же значение для столбца «недели», что и значения. Это можно увидеть, набрав print(grps.groups)
в консоли. Затем я перебираю ключи групп и добавляю каждый фрейм данных недели в словарь, вызывая метод get_group
для объекта groupby.
import pandas as pd
# Make sample data
index=pd.date_range(start='2014-01-01', end='2014-1-31',freq='D')
df = pd.DataFrame({"vals":np.random.randint(-5,5,len(index))}, index=index)
df["csum"] = df.vals.cumsum()
# Add a column for weeks to enable grouping
df["weeks"] = df.index.week
# Group the data
grps = df.groupby("weeks")
# split the group into separate dataframes
df_dict = {}
for gi in grps.groups:
df_dict[gi] = grps.get_group(gi)
Я начинаю с чего-то вроде этого:
vals csum weeks
2014-01-01 4 4 1
2014-01-02 -5 -1 1
...
2014-01-30 -2 -9 5
2014-01-31 -5 -14 5
и в итоге получим фрейм данных, подобный следующему
1
vals csum weeks
2014-01-01 4 4 1
2014-01-02 -5 -1 1
2014-01-03 -4 -5 1
2014-01-04 4 -1 1
2014-01-05 -5 -6 1
2
vals csum weeks
2014-01-06 -5 -11 2
2014-01-07 2 -9 2
2014-01-08 4 -5 2
2014-01-09 -1 -6 2
2014-01-10 -1 -7 2
2014-01-11 -3 -10 2
2014-01-12 -2 -12 2