将数据帧值与字典中的键范围和返回值进行比较

时间:2018-04-16 18:48:57

标签: python python-3.x pandas dictionary dataframe

我试图将数据框中的值与字典中的键范围进行比较,并获取相应的字典值。 一直在研究循环和迭代,但作为一个初学者,不能让它发挥作用。

示例:

import pandas as pd

colors = {range(0,50):"red",range(50,100):"blue",
          range(100,150):"green",range(150,200):"orange"
          ,range(200, 250):"purple", range(250,1000):"grey"}

df = pd.DataFrame(data=[51,8,265,167], columns=['A'])

我正在寻找的结果:

    A     color
0   51    blue
1   8     red
2   265   grey
3   167   orange

这是我的基本想法(使用硬编码值):

for (start, end), value in colors.items():
    if start <= 85 < end:
        print(value) #add retrieved value to dataframe

我想我可以使用理解和/或lambda函数,但同样,我是初学者。

1 个答案:

答案 0 :(得分:0)

您可以使用numpy.select向您的计算进行矢量化。与循环if / else构造相比,这将更有效,更易于维护。

import pandas as pd, numpy as np

colors = {range(0,50):"red",range(50,100):"blue",
          range(100,150):"green",range(150,200):"orange",
          range(200, 250):"purple", range(250,1000):"grey"}

df = pd.DataFrame(data=[51,8,265,167], columns=['A'])

df['color'] = np.select([df['A'].isin(x) for x in colors], colors.values(), None)

<强>结果

     A   color
0   51    blue
1    8     red
2  265    grey
3  167  orange