Pandas根据其他列上的复合条件添加列

时间:2018-05-16 08:37:52

标签: python pandas dataframe

我有一个

的数据框
| 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)

这将允许我使用二进制条件,并且非常快。但为了使它同时满足这两个条件,我必须使用其中两个。我想知道是否有办法使用双重条件的有效过滤。

1 个答案:

答案 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