Как приравнять значения к единице?

Делаю df['zero'], в котором размещу посчитанные значения на основе df['2']. Логика такая, когда время 120000 то df['zero'] само по себе будет равно 1 (сейчас заполнил везде 1 - пусть так будет), но значение в этой ячейке в 12 часов - будет равно переменой "а" - на основе нее будет считать все значения от 12 часов до 14 часов.

Пересчет указан так, думаю это верно:

df.loc[(df['Time'] >= 120100)&(df['Time'] <= 135900), 'zero'] = df['2'] *1 / a

То есть, я преобразую разные df['2'] к одной точке отсчета. Ну и соотвественно, для каждого нового дня в df этот расчет повторяется - берем переменную "а" в 12 часов, считаем все остальные значения преобразования и привидения к одному первому значению все из df['2'].

Как правильно сделать?

Файл.

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

df = pd.read_csv('201201.csv')

df['zero'] = 1
a = df['Time'] == 120000 ...
    
df.loc[(df['Time'] >= 120100)&(df['Time'] <= 135900), 'zero'] = df['2'] *1 / a

Данные для расчетов:

Date        Time    1       2
20200103    100100  154670  155990
20200103    100200  155940  156090
20200103    100300  156080  156350
20200103    100400  156340  156400
20200103    100500  156400  156610
20200103    100600  156500  156600
20200103    100700  156510  156550
20200103    100800  156540  156580
20200103    100900  156560  156590

Ответы (1 шт):

Автор решения: MaxU

Если я правильно понял условия:

df["new"] = (df
             .groupby("Date", as_index=False)
             .apply(lambda x: x["2"] / x.loc[x["Time"].eq(120000), "2"].iloc[0])
             .reset_index(level=0, drop=True))

Результат:

In [342]: df
Out[342]: 
           Date    Time       1       2       new
0      20200103  100100  154670  155990  0.994898
1      20200103  100200  155940  156090  0.995535
2      20200103  100300  156080  156350  0.997194
3      20200103  100400  156340  156400  0.997513
4      20200103  100500  156400  156610  0.998852
...         ...     ...     ...     ...       ...
33934  20200304  234600  135580  135680  1.009749
33935  20200304  234700  135630  135640  1.009452
33936  20200304  234800  135620  135620  1.009303
33937  20200304  234900  135570  135610  1.009228
33938  20200304  235000  135590  135630  1.009377

[33939 rows x 5 columns]

Проверка коэфициента для времени 12:00:00 - ожидаемое значение 1.0:

In [315]: df.query("Time == 120000").head()
Out[315]: 
          Date    Time       1       2  new
119   20200103  120000  156690  156790  1.0
929   20200106  120000  155250  155250  1.0
1739  20200108  120000  157210  157220  1.0
2549  20200109  120000  160160  160160  1.0
3354  20200110  120000  160760  160800  1.0

UPD: график значений df["new"]: введите сюда описание изображения

→ Ссылка