一种解决方案是两次使用 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
有没有更优雅的方式来实现这一目标?
答案 0 :(得分:5)
使用numpy.where
:
s = np.where(s, 'B', 'A')
如果要输入布尔序列,这比map
和apply
快得多:
s = pd.Series(np.random.choice([True, False], 1000000))
%%timeit
np.where(s, 'A','B')
每个循环4.43 ms±94.3 µs(平均±标准偏差,共运行7次,每个循环100个循环)
mapper={True:'B',False:'A'}
%%timeit
s.map(mapper)
每个循环44.1 ms±178 µs(平均±标准偏差,共运行7次,每个循环10个循环)
%%timeit
s.apply(lambda x: 'B' if x else 'A')
每个循环126 ms±4.51 ms(平均±标准偏差,共运行7次,每个循环10个循环)
答案 1 :(得分:3)
使用SELECT T.STOCK_DATE,
I.ITEM_BARCODE,
I.ITEM_NAME,
SUM(T.STOCK_QUANTITY) - SUM(S.SALES_QUANTITY) AS QUANTITY
FROM ITEMS I
INNER
JOIN STOCKS T
ON I.ITEM_ID = T.ITEM_ID
LEFT
JOIN SALES S
ON I.ITEM_ID = S.ITEM_ID
GROUP
BY I.ITEM_BARCODE,
T.STOCK_DATE,
I.ITEM_NAME
ORDER
BY T.STOCK_DATE;
map
答案 2 :(得分:1)
我会用pandas.Series.apply
来做到这一点:
mapper={True:'B',False:'A'}
s = s.map(mapper)
s
Out[598]:
0 B
1 A
2 A
dtype: object
答案 3 :(得分:1)
您可以通过.map()函数使用以下命令:
s = pd.Series([True, False, False])
s = s.map({True: 'A', False: 'B'})
print(s)
或者您也可以在.map()函数下使用lambda函数尝试另一种方式:
s = pd.Series([True, False, False])
s = s.map(lambda x: "A" if x else "B")
print(s)