Найти Max & Min одного столбца и разницу двух других столбцов в Python - PullRequest
0 голосов
/ 28 декабря 2018

Я работаю над таблицей с именем kpi , где мне нужно рассчитать разницу (самое последнее B1 - самое раннее B0) для каждого BoxID в неделю, используя минимальное и максимальное для каждого BoxID за неделю , поэтому вам нужно будет использовать минимальное значение № и использовать соответствующий B0, а также максимальное значение Нети используйте соответствующий B1, затем найдите разницу.- Я запрограммировал R с некоторой помощью, но теперь мне нужен и код на Python.

kpi %>%
  group_by(BoxID, WkNo) %>%
  mutate(i = which.min(No.), 
         j = which.max(No.)) %>%
  mutate(First_B0 = B0[i],
         Last_B1 = B1[j],
         Diff = Last_B1 - First_B0) %>%
  select(-i, -j)

Таблица ввода -

Date      No.   BoxID B0      B1      WkNo
29.10.2018  61931   1   0       0       44
15.11.2018  115763  1   5.38    5.38    46
16.11.2018  119833  1   51.86   52.23   46
29.10.2018  60486   3   23.26   22.97   44
10.11.2018  99576   3   1336.53 1336.53 45
14.11.2018  112259  3   1.19    1.04    46
16.11.2018  117965  3   8.68    47.22   46
16.11.2018  118092  3   47.22   47.22   46
15.11.2018  115396  4   82.05   82.05   46

Ожидаетсявыходная таблица -

Date        No.   BoxID B0      B1      WkNo   First_b1     Last_b0  Diff
29.10.2018  61931   1   0       0       44     0            0        0
15.11.2018  115763  1   5.38    5.38    46     52.23        5.38     46.85
16.11.2018  119833  1   51.86   52.23   46     52.23        5.38     46.85
29.10.2018  60486   3   23.26   22.97   44     22.97        23.26    -0.29
10.11.2018  99576   3   1336.53 1336.53 45     1336.53      1336.53  0
14.11.2018  112259  3   1.19    1.04    46     47.22        1.19     46.03
16.11.2018  117965  3   8.68    47.22   46     47.22        1.19     46.03
16.11.2018  118092  3   47.22   47.22   46     47.22        1.19     46.03
15.11.2018  115396  4   82.05   82.05   46     82.05       82.05     0

Мне нужна помощь, чтобы вычислить еще 3 столбца.Заранее спасибо.

1 Ответ

0 голосов
/ 29 декабря 2018

В питоне эти типы проблем лучше всего решать с помощью библиотеки панд.Как пользователь R, вы с легкостью сможете работать с фреймами данных, поскольку pandas был очень похож на R.

Предполагая, что ваша таблица представляет собой файл .csv с именем "kpi.csv" ...

>>import pandas as pd

>>df = pd.read_csv('kpi.csv')   

>>df2 = df.loc[df.groupby(['BoxID','WkNo'])['No.'].idxmax(),['BoxID','WkNo','B1']]
>>df3 = df.loc[df.groupby(['BoxID','WkNo'])['No.'].idxmin(),['BoxID','WkNo','B0']]

>>df = df.merge(df2,on=['BoxID','WkNo'])
>>df = df.merge(df3,on=['BoxID','WkNo'])

>>df = df.rename(columns = {'B0_x' : 'B0',
                          'B1_x' : 'B1',
                          'B1_y' : 'First_b1',
                          'B0_y' : 'Last_b0'})

>>df['Diff'] = df['First_b1'] - df['Last_b0']
>>print(df)




         Date     No.  BoxID       B0  ...    WkNo  First_b1  Last_b0   Diff
0  29.10.2018   61931      1     0.00  ...      44      0.00     0.00   0.00
1  15.11.2018  115763      1     5.38  ...      46     52.23     5.38  46.85
2  16.11.2018  119833      1    51.86  ...      46     52.23     5.38  46.85
3  29.10.2018   60486      3    23.26  ...      44     22.97    23.26  -0.29
4  10.11.2018   99576      3  1336.53  ...      45   1336.53  1336.53   0.00
5  14.11.2018  112259      3     1.19  ...      46     47.22     1.19  46.03
6  16.11.2018  117965      3     8.68  ...      46     47.22     1.19  46.03
7  16.11.2018  118092      3    47.22  ...      46     47.22     1.19  46.03
8  15.11.2018  115396      4    82.05  ...      46     82.05    82.05   0.00
...