筛选 pandas 系列然后设置所选部分的值的最佳方法是什么?

What's the best way to filter a pandas series and then set the values of the part selected?

例如我有这样一个系列:

AFalse    0.220522 
BTrue    -1.050370
CFalse   -1.202922
DTrue     0.950305
EFalse    0.003110
FTrue     1.115483
GFalse    0.767281
HTrue    -1.376692
IFalse    1.729867
JTrue     2.574027
dtype: float64

我只想过滤掉 'True' 的行,并将值设置为 None。从速度的角度来看,最好的方法是什么?我会运行这个操作几百万次。谢谢

使用向量化运算将有助于提高速度。以你的 Series 作为 s

df = s.reset_index()
mask = df['index'].str.contains('True')
df.loc[mask, 'a'] = None
df.set_index('index')['a']

returns

index
AFalse    0.220522
BTrue          NaN
CFalse   -1.202922
DTrue          NaN
EFalse    0.003110
FTrue          NaN
GFalse    0.767281
HTrue          NaN
IFalse    1.729867
JTrue          NaN
Name: a, dtype: float64

初始化一个随机序列:

s = pd.Series(np.random.rand(4), index=idx, name='test')

使用列表理解在索引上创建掩码。请注意,'True' 可以是索引值内的任何位置。然后使用 .loc 设置值,就像您已经完成的那样。

idx = ['True' in i for i in s.index]
s.loc[idx] = None  # or np.NaN

>>> s
Out[50]: 
ATrue          None
BFalse    0.9134165
CTrue          None
DFalse    0.2530273
Name: test, dtype: object