Как приравнять значения к единице?
Делаю 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 шт):
Если я правильно понял условия:
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
