gpt4 book ai didi

python - Pandas 查表

转载 作者:太空狗 更新时间:2023-10-29 21:42:20 25 4
gpt4 key购买 nike

我有一个看起来像这样的 pandas 查找表

Grade   Lower_Boundary  Upper_Boundary
1 -110 -96
2 -96 -91
3 -91 -85
4 -85 -81
5 -81 -77
6 -77 -72
7 -72 -68
8 -68 -63
9 -63 -58
10 -58 -54
11 -54 -50
12 -50 -46
13 -46 -42
14 -42 -38
15 -38 -34
16 -34 -28
17 -28 -18
18 -18 -11
19 -11 -11
20 -11 -9

我有另一个看起来包含分数的 pandas 数据框。我想通过查找查找表将“等级”分配给分数列。因此,根据分数落在下边界和上边界的哪个区间,应该从查找表中的那一行分配等级。有没有办法不用输入一堆 if then else 语句就可以做到这一点?我只想到 excel 的索引匹配。

Score   Grade
-75 6
-75 6
-60 9
-66 8
-66 8
-98 1
-60 9
-82 4
-70 7
-60 9
-60 9
-60 9
-56 10
-70 7
-70 7
-70 7
-66 8
-56 10
-66 8
-66 8

最佳答案

单行解决方案(我称您的查找表为lookup):

df['Score'].apply(lambda score: lookup['Grade'][(lookup['Lower_Boundary'] <= score) & (lookup['Upper_Boundary'] > score)].values[0])

解释:

对于给定的分数,以下是查找分数的方法:

score = -75
match = (lookup['Lower_Boundary'] <= score) & (lookup['Upper_Boundary'] > score)
grade = lookup['Grade'][match]

这将返回一个长度为 1 的系列。您可以通过以下方式获取其值,例如:

grade.values[0]

您需要做的就是应用上述内容到得分列。如果您想要单行代码,请使用 lambda 函数:

df['Score'].apply(lambda score: lookup['Grade'][(lookup['Lower_Boundary'] <= score) & (lookup['Upper_Boundary'] > score)].values[0])

否则以下内容将更具可读性:

def lookup_grade(score):
match = (lookup['Lower_Boundary'] <= score) & (lookup['Upper_Boundary'] > score)
grade = lookup['Grade'][match]
return grade.values[0]

df['Score'].apply(lookup_grade)

这种方法还可以更轻松地处理未找到匹配项的情况。

关于python - Pandas 查表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35469399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com