一个解决方案是使用 replace() 两次:
import pandas as pd
s = pd.Series([True, False, False])
s = s.replace(False, "A")
s = s.replace(True, 'B')
然后,
Out[1]:
0 B
1 A
2 A
有没有更优雅的方法来完成这个?
请您参考如下方法:
使用 numpy.where :
s = np.where(s, 'B', 'A')
这比 map 和 apply 快得多,如果您正在输入一个 bool 系列:
s = pd.Series(np.random.choice([True, False], 1000000))
%%timeit
np.where(s, 'A','B')
每个循环 4.43 毫秒 ± 94.3 微秒(7 次运行的平均值 ± 标准偏差,每次 100 次循环)
mapper={True:'B',False:'A'}
%%timeit
s.map(mapper)
每个循环 44.1 毫秒 ± 178 µs(7 次运行的平均值 ± 标准偏差,每次 10 次循环)
%%timeit
s.apply(lambda x: 'B' if x else 'A')
每次循环 126 毫秒 ± 4.51 毫秒(7 次运行的平均值 ± 标准偏差,每次 10 次循环)
