我有一个
的数据框| A | B |
| -- | -- |
| 1 | good |
| 2 | bad |
| 3 | bad |
| 4 | mid |
我想添加另一个将B列转换为数字的列,这样如果B是"好"你得到1,如果B是"坏"你得到0,如果B是" mid"你得到另一个号码,比如说2.
考虑到数据帧非常大,最有效的方法是什么?我可以使用lambda函数和.apply
,这是一种方式,不是特别有效。使用过滤可以执行
df['C'] = np.where(df['B']=='good', 1, 0)
这将允许我使用二进制条件,并且非常快。但为了使它同时满足这两个条件,我必须使用其中两个。我想知道是否有办法使用双重条件的有效过滤。
答案 0 :(得分:1)
使用字典。例如,定义:
d = {'good': 1, 'bad': 0, 'mid': 2}
然后使用pd.Series.map
,它接受字典作为输入:
df['C'] = df['B'].map(d)
您也可以使用pd.Series.replace
,但这种方法往往效果不佳。
相关:Replace values in a pandas series via dictionary efficiently