2016-02-26 53 views
-1

我的数据是:大熊猫series.sum()如何跳过一些指标

ipdb> self.valid_secpos[self.valid_secpos>0] 
000793.SZ  4500 
000895.SZ  2800 
601601.SH  2000 
601618.SH 12200 
002024.SZ  5200 
000960.SZ  3000 
600030.SH  2100 
... ... 
Length: 139, dtype: int64 

ipdb> self.valid_secpos_price[self.valid_secpos_price>0] 
000793.SZ 15.732091 
000895.SZ 23.986040 
601601.SH 33.867075 
601618.SH  5.567947 
002024.SZ 13.205894 
000960.SZ 22.500000 
600030.SH 33.511157 
... ... 
Length: 139, dtype: float64 

而且我想要得到的res = self.valid_secpos[self.valid_secpos>0] * self.valid_secpos_price[self.valid_secpos_price>0]的总和,这是res.sum()。但是,我不需要添加这些索引的值s = set([u'000826.SZ', u'600832.SH', u'600597.SH', ...])。所以,我的代码是:

sum = 0 
for _id, _val in zip(res.index, res.values): 
    if _id not in s: 
     sum += _val 

它的工作原理,但是,如何使用熊猫内置函数来做到这一点。 for循环真的很讨厌。提前致谢。

+0

您确定“valid_secpos> 0”和“valid_secpos_price> 0”条件是否兼容?如果有一个数据点满足一个而不是另一个,会怎么样?更好的是定义一个标准并执行'(self.valid_secpos [criterion] * self.valid_secpos_price [criterion])。sum()'。 – BrenBarn

+0

@BrenBarn,它们是兼容的。我确定。 'self.valid_secpos [self.valid_secpos> 0]'它意味着获得所有''self.valid_secpos'中的值''0'。他们来自我的ipdb控制台 –

回答

0

最好摆脱你不想要的行,那么你不需要跳过任何东西。

res.drop(s).sum()