我试图将数据框中的值与字典中的键范围进行比较,并获取相应的字典值。 一直在研究循环和迭代,但作为一个初学者,不能让它发挥作用。
示例:
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函数,但同样,我是初学者。
答案 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