我有一个大的 df,它具有类似的分类序数值,我想将其更改为数字标度。 尝试解释的模拟 df:
data = {'Fruit':[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'Weight':[23, 45, 31, 28, 62, 12, 44, 42, 23, 32],
'Taste':['good', 'so so', 'very good', 'awful', 'awful', 'very good', 'good', 'good', 'awful', 'good'],
'Look':['good', 'good', 'so so', 'awful', 'so so', 'very good', 'very good', 'good', 'awful', 'good']}
df = pd.DataFrame(data)
我想将“味道”和“外观”中的值从非常好等更改为 4-1。如果它是一个专栏,我会写:df['Taste'] = df['Taste'].map({'very good': 4, 'good': 3, 'so so': 2 , '糟糕': 1}) 但这不适用于 df[['Taste', 'Look']] = df[['Taste', 'Look']].map({'very good': 4, 'good': 3, '马马虎虎': 2, '糟糕': 1}) 我也试过: df.update(df[['Taste', 'Look']].map({'very good': 4, 'good': 3, 'so so': 2, 'awful': 1})) 这是行不通的。
有什么提示和技巧吗?
请您参考如下方法:
使用DataFrame.applymap使用 get:
d = {'very good': 4, 'good': 3, 'so so': 2, 'awful': 1}
df[['Taste', 'Look']] = df[['Taste', 'Look']].applymap(d.get)
map 的解决方案是可能的,但需要 stack 和 unstack:
df[['Taste', 'Look']] = df[['Taste', 'Look']].stack().map(d).unstack()
print (df)
Fruit Weight Taste Look
0 1 23 3 3
1 2 45 2 3
2 3 31 4 2
3 4 28 1 1
4 5 62 1 2
5 6 12 4 4
6 7 44 3 4
7 8 42 3 3
8 9 23 1 1
9 10 32 3 3
