У меня есть dataframe с кучей датДоступ словарь с диапазоном дат панды
0 2016-01-01
1 2016-01-02
2 2016-01-03
3 2016-01-04
4 2016-01-05
5 2016-01-06
6 2016-01-07
7 2016-01-08
8 2016-01-09
9 2016-01-10
10 2016-01-11
11 2016-01-12
12 2016-01-13
13 2016-01-14
14 2016-01-15
15 2016-01-16
16 2016-01-17
17 2016-01-20
18 2016-01-21
19 2016-01-22
20 2016-01-24
21 2016-01-25
22 2016-01-27
23 2016-01-28
24 2016-01-29
25 2016-01-30
26 2016-01-31
Я хотел бы группировать dataframe по дате с использованием r = df.group_by('time')
, а затем перебрать ключи, чтобы получить некоторые статистика. Дело в том, что дни не полные (вы увидите, что мне не хватает 18 и 19 января). Поэтому мне бы очень хотелось создать диапазон дат, а затем прокрутить диапазон дат. Но когда я пытаюсь это сделать, я получаю ключевую ошибку, когда передаю элементы диапазона дат в словарь.
Любые идеи о том, как я мог это сделать?
Вот код:
doi = (df.time<='2016-01-31')&(df.time>='2016-01-01')
oil = df[doi]
#Trouble Here.
r = oil.groupby(by = 'time')
D = oil.time
dates = pd.date_range(D.min(),D.max())
frames = []
for d in dates:
#The idea here is that if the date in the date range is not in the dataframe,
#Then there is no sum to compute. return 0
try:
sum_of_oil = oil.ix[r.groups[d]].capacity.sum()
except KeyError:
sum_of_oil = 0
frames.append([d,sum_of_oil])
frames = pd.DataFrame(frames, columns = ['time','volume'])
Может быть стоит отметить, что элементы oil.time
являются Timestamps
.
Пожалуйста показать код. – roadrunner66
@ roadrunner66 см. Новое редактирование. –
Значит, вам нужна месячная агрегация? Если это так, пропущенные даты в таком диапазоне уже будут рассмотрены. – Parfait