Панды: Сумма за промежуток времени с учетом максимального значения различных объектов - PullRequest
0 голосов
/ 10 октября 2019
date        value           pointName   pointNr     connectedPoint  ownerName
2018-05-08  2.039373e+08    Miami_1     P-00068     Point_1         Owner_1
2018-05-09  2.546125e+08    Miami_1     P-00068     Point_1         Owner_1 
2018-05-09  2.546010e+08    Miami_2     P-00066     Point_1         Owner_2 
2018-05-08  2.037412e+08    Miami_2     P-00066     Point_1         Owner_2 
2018-05-09  7.142878e+08    New_York_1  P-00211     Point_2         Owner_3 
2018-05-08  6.567392e+08    New_York_1  P-00211     Point_2         Owner_3 
2018-05-08  6.567392e+08    New_York_2  P-00188     Point_2         Owner_4 
2018-05-09  7.141274e+08    New_York_3  P-00126     Point_2         Owner_2 
2018-05-09  7.142878e+08    New_York_2  P-00188     Point_2         Owner_4 
2018-05-08  6.566841e+08    New_York_3  P-00126     Point_2         Owner_2 
2018-05-08  0.000000e+00    Boston_1    P-00081     Point_3         Owner_4 
2018-05-08  0.000000e+00    Boston_2    P-00105     Point_3         Owner_5
2018-05-09  6.987462e+07    Boston_2    P-00105     Point_3         Owner_5
2018-05-09  7.000680e+07    Boston_1    P-00081     Point_3         Owner_4 

Приведенный выше фрагмент более или менее является результатом:

rng = pd.DataFrame(my_df[['date', 'value', 'pointName', 'pointNr', 'connectedPoint', 'ownerName]].sort_values('connectedPoint').reset_index(drop=True))
rng.head(14)

Я получил данные за весь год. Для этого примера я выбрал два дня (2018-05-08 и 2018-05-09)

Я хотел бы рассчитать сумму за период времени (здесь, в данном случае: два дня), но для каждогодень просто посчитав максимальное значение каждой подключенной точки.

Пример для 2018-05-08 в псевдоматематическом написании:сумма (max {Point1} + max {Point2} + max {Point3})= 2.039373e + 08 + 6.567392e + 08 +…Наконец, мы суммируем значения (означающие предварительно рассчитанные суммы) для каждого дня (день1 + день2 + день3 ...), в результате чего получается одно окончательное значение.

Я пробовал разные подходы с групповой обработкой, а также варианты:

rng['date'] = pd.to_datetime(rng['date'])
rng.index = rng['date'] 
rng.resample('D').max()

Извините, я новичок в питоне и пандах. Я искал в Интернете, но все еще не могу найти решение, хотя этот случай здесь очевиден для многих из вас. Я застрял.

Заранее спасибо!

1 Ответ

1 голос
/ 11 октября 2019

Использование DataFrame.groupby + DataFrame.unstack

df1=df.groupby(['date','connectedPoint'])['value'].max().unstack()
print(df1)

connectedPoint      Point_1      Point_2     Point_3
date                                                
2018-05-08      203937300.0  656739200.0         0.0
2018-05-09      254612500.0  714287800.0  70006800.0

Получение общей суммы по дате:

sum_date=df1.sum(axis=1)
print(sum_date)

date
2018-05-08    8.606765e+08
2018-05-09    1.038907e+09
dtype: float64

Получение общей суммы:

sum_tot=sum_date.sum()
print(sum_tot)

1899583600.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...