在 Python 中查找一列的最大值和最小值以及其他两列的差值

Find Max & Min of one column and difference of two other columns in Python

我正在研究名为 kpi 的 table,我需要使用最小值计算每周每个 BoxID 的(最新 B1 - 最早 B0)的差异每个 BoxID 每个 No. 和最大值 No.week,所以需要用No.的最小值对应B0,用No.的最大值对应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)

输入table-

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

预期输出table -

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 列。提前谢谢你。

在python中,这些类型的问题最好使用pandas库来解决。作为 R 用户,您会发现数据框易于使用,因为 pandas 的设计非常像 R。

假设您的 table 是一个名为 "kpi.csv"...

的 .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