如何使用.map(或其他)更改数据帧中多个列的值

2024-05-16 03:04:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大的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)   

我想将“Taste”和“Look”中的值从“very good”等更改为4-1。如果是一列,我只写:df['Taste'] = df['Taste'].map({'very good': 4, 'good': 3, 'so so': 2, 'awful': 1}) 但这对df[['Taste', 'Look']] = df[['Taste', 'Look']].map({'very good': 4, 'good': 3, 'so so': 2, 'awful': 1})不起作用 我还尝试了:df.update(df[['Taste', 'Look']].map({'very good': 4, 'good': 3, 'so so': 2, 'awful': 1})),但它不起作用

有什么窍门吗


Tags: mapdfdataso分类数字very数值
1条回答
网友
1楼 · 发布于 2024-05-16 03:04:59

^{}get一起使用:

d = {'very good': 4, 'good': 3, 'so so': 2, 'awful': 1}
df[['Taste', 'Look']] = df[['Taste', 'Look']].applymap(d.get)

可以使用map解决问题,但需要使用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

相关问题 更多 >