在 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
我正在研究名为 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