Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Select 什么';过滤熊猫系列,然后设置所选零件的值的最佳方法是什么?_Select_Pandas_Filtering_Series_Setvalue - Fatal编程技术网

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
与我自己拥有的非常相似,但我相信这就是我正在寻找的。