大熊猫series.sum()如何跳过一些指标
问题描述:
我的数据是:大熊猫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循环真的很讨厌。提前致谢。
答
最好摆脱你不想要的行,那么你不需要跳过任何东西。
res.drop(s).sum()
您确定“valid_secpos> 0”和“valid_secpos_price> 0”条件是否兼容?如果有一个数据点满足一个而不是另一个,会怎么样?更好的是定义一个标准并执行'(self.valid_secpos [criterion] * self.valid_secpos_price [criterion])。sum()'。 – BrenBarn
@BrenBarn,它们是兼容的。我确定。 'self.valid_secpos [self.valid_secpos> 0]'它意味着获得所有''self.valid_secpos'中的值''0'。他们来自我的ipdb控制台 –