【问题标题】:Compare dataframe value with key range in dictionary and return value [duplicate]将数据帧值与字典中的键范围进行比较并返回值
【发布时间】:2018-09-26 14:30:26
【问题描述】:

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

例子:

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 函数,但我还是个初学者。

【问题讨论】:

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


    【解决方案1】:

    您可以使用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
    

    【讨论】:

      猜你喜欢
      • 2017-03-09
      • 1970-01-01
      • 2019-06-23
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多