Select 什么';过滤熊猫系列,然后设置所选零件的值的最佳方法是什么?
例如,我有这样一个系列:Select 什么';过滤熊猫系列,然后设置所选零件的值的最佳方法是什么?,select,pandas,filtering,series,setvalue,Select,Pandas,Filtering,Series,Setvalue,例如,我有这样一个系列: 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。从速
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。从速度角度来看,最好的方法是什么?我将运行此操作数百万次。谢谢。使用矢量化操作将有助于提高速度。从您的
系列开始
df = s.reset_index()
mask = df['index'].str.contains('True')
df.loc[mask, 'a'] = None
df.set_index('index')['a']
返回
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
True
和False
行是否总是交替?这个系列是如何构建的?如果在序列的构造过程中,可以将A、B、C
s与True
、False
s分开,那么可以更快地选择True
行。这里的序列只是一个示例。实际的系列是一个限价订单簿快照,其名称为“bid.1.price”、“bid.2.price”…、“ask.1.price”、“ask.2.price”…,我希望能够根据快速选择方案更改这些条目的值。该方法可行,但该操作会创建一个新的df,这将极大地影响我的内存使用。当执行大量此操作时,这将影响代码性能。有没有办法过滤出该系列的视图并设置其值,而不是创建该系列的副本?这是我拥有的最好的方法:idxs=filter(lambda x:x.endswith('True'),s.index)
s.loc[idxs]=None
与我自己拥有的非常相似,但我相信这就是我正在寻找的。