Используйте Series.map
, но сначала сгенерируйте словарь в понимании dict с помощью split
, также преобразуйте столбец c1
в string
, если он заполнен целыми числами:
d = {"low" : '1,4', "high" : '2,5', "medium":'3'}
d1 = {x:k for k, v in d.items() for x in v.split(',')}
print (d1)
{'1': 'low', '4': 'low', '2': 'high', '5': 'high', '3': 'medium'}
df['c2'] = df['c1'].astype(str).map(d1)
print (df)
c1 c2
0 1 low
1 2 high
2 3 medium
3 4 low
4 5 high
Решение, если списки в dictionary
:
d = {"low" : [1,4], "high" : [2,5], "medium":[3]}
d1 = {x:k for k, v in d.items() for x in v}
print (d1)
{1: 'low', 4: 'low', 2: 'high', 5: 'high', 3: 'medium'}
df['c2'] = df['c1'].map(d1)
print (df)
c1 c2
0 1 low
1 2 high
2 3 medium
3 4 low
4 5 high