gpt4 book ai didi

python - 确定列值是否在基于另一列的条件范围之间

转载 作者:太空宇宙 更新时间:2023-11-03 13:25:21 24 4
gpt4 key购买 nike

我有一个如下所示的数据框:

    data = np.array([[5, 'red', 2,6, 8, 10],
[11, 'red', 3,9,6,15],
[8, 'blue', 0, 3, 5, 10],
[2, 'blue', 1, 2, 3, 4]])
df = pd.DataFrame(data, columns = ['A','B','red_lower', 'red_upper', 'blue_lower', 'blue_upper'])
    A     B red_lower red_upper blue_lower blue_upper
0 5 red 2 6 8 10
1 11 red 3 9 6 15
2 8 blue 0 3 5 10
3 2 blue 1 2 3 4

我想创建一个额外的列,告诉我列 A 中的值是否在列 B 中给定的颜色范围内。例如,在第 0 行中,由于 5 指定为红色,我将检查 5 是否在 2 和 6 之间。是的,所以我将新列的值为 1。

期望的结果:

    A    B   red_lower red_upper blue_lower blue_upper in_range
0 5 red 2 6 8 10 1
1 11 red 3 9 6 15 0
2 8 blue 0 3 5 10 1
3 2 blue 1 2 3 4 0

我尝试编写一个循环,但出现了很多系列错误。我真的不想拆分数据框(按颜色),但也许这就是要走的路? (在我的实际数据框中,有六种不同的“颜色”,而不仅仅是两种)。

谢谢!

编辑:如果我们有额外的列,则奖励告诉我该值是高于还是低于范围!例如,在第 1 行中,11 超出范围,因此过高。表格应该是这样的:

    A     B red_lower red_upper blue_lower blue_upper in_range
0 5 red 2 6 8 10 inside
1 11 red 3 9 6 15 above
2 8 blue 0 3 5 10 inside
3 2 blue 1 2 3 4 below

最佳答案

这里是使用groupby拆分定义的df和大部分步骤,这意味着你不需要每次都输入不同的颜色

l=[]
for name,x in df.groupby('B',sort=False):
s1=(x.A >= x.filter(like=name).iloc[:, 0]) & (x.A <= x.filter(like=name).iloc[:, 1])
s2=x.A<x.filter(like=name).iloc[:, 0]
l.extend(np.select([s1,s2],['inside','below'],default='above').tolist())

df['in_range']=l
df
Out[64]:
A B red_lower red_upper blue_lower blue_upper in_range
0 5 red 2 6 8 10 inside
1 11 red 3 9 6 15 above
2 8 blue 0 3 5 10 inside
3 2 blue 1 2 3 4 below

关于python - 确定列值是否在基于另一列的条件范围之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56942502/

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