Хотя я вижу, что вы нашли свой ответ, ваше решение кажется очень уродливым. Позвольте мне показать вам более чистый подход к пандам.
Сначала вам нужно будет создать новый столбец с именем date.
df['date'] = df['Timeseries'].dt.date ##
print(df)
Timeseries A date
0 2019-01-24 14:03:00 10 2019-01-24
1 2019-01-24 14:04:00 20 2019-01-24
2 2019-01-24 14:05:00 15 2019-01-24
3 2019-01-25 14:06:00 9 2019-01-25
4 2019-01-25 14:07:00 18 2019-01-25
5 2019-01-25 14:08:00 12 2019-01-25
Теперь примените групповую функцию к столбцу даты и найдите максимальное значение для каждой даты
grouped_df = df.groupby(df['date']).max().reset_index()[['date', 'A']]
grouped_df.columns = ['date', 'max_A']
print(grouped_df)
date max_A
0 2019-01-24 20
1 2019-01-25 18
Теперь вы можете использовать функцию df.merge () , чтобы объединить 2 кадра данных в столбце
merged_df = df.merge(grouped_df, on='date')
print(merged_df)
Timeseries A date max_A
0 2019-01-24 14:03:00 10 2019-01-24 20
1 2019-01-24 14:04:00 20 2019-01-24 20
2 2019-01-24 14:05:00 15 2019-01-24 20
3 2019-01-25 14:06:00 9 2019-01-25 18
4 2019-01-25 14:07:00 18 2019-01-25 18
5 2019-01-25 14:08:00 12 2019-01-25 18
Теперь для каждой строки в кадре данных у вас есть A
и max_A
. Просто создайте новый столбец, разделив A/max_A
merged_df['puA'] = merged_df['A']/merged_df['max_A']
print(merged_df)
Timeseries A date max_A puA
0 2019-01-24 14:03:00 10 2019-01-24 20 0.500000
1 2019-01-24 14:04:00 20 2019-01-24 20 1.000000
2 2019-01-24 14:05:00 15 2019-01-24 20 0.750000
3 2019-01-25 14:06:00 9 2019-01-25 18 0.500000
4 2019-01-25 14:07:00 18 2019-01-25 18 1.000000
5 2019-01-25 14:08:00 12 2019-01-25 18 0.666667
Этот мой друг - путь панд. Он не содержит никаких уродливых циклов и жестко закодированных строк.