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

时间:2018-12-28 18:57:09

标签: python calculated-columns

我正在处理一个名为 kpi 的表,我需要在该表中使用最小编号来计算每个BoxID每周(最新B1-最早B0)的差值。和每个的每个 BoxID 的最大值,因此您需要使用No.的最小值,并使用相应的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 :(得分:1)

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

假设您的表是一个名为“ 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