从特定元素除外的熊猫系列中减去一个数字

时间:2016-01-15 03:18:21

标签: pandas series

我有一个像这样的熊猫系列。

cluster_grtr_6
Out[100]: 
Clusters
Cluster 1    7
Cluster 4    7
Cluster 5    8
Name: quant_bought, dtype: int64

在应用某些条件后,我得到一个变量a

a
Out[101]: 
3    Cluster 5
Name: Clusters, dtype: object

我想从系列的每个元素中减去6,除了a

中的那个元素

因此,最终输出应该如下所示

Clusters
Cluster 1    1
Cluster 4    1
Cluster 5    8

用于减去我可以简单地执行的每个元素

(cluster_grtr_6 - 6)

2 个答案:

答案 0 :(得分:2)

您可以使用布尔掩码。首先在a

中找到索引标签
In [64]: s.index.isin(a)
Out[64]: array([False, False,  True], dtype=bool)

然后使用True在数值运算中被视为1和False为0的事实

In [65]: result = s - 6 * ~s.index.isin(a)

In [66]: result
Out[66]:
cluster 1    1
cluster 4    1
cluster 5    8
dtype: int64

答案 1 :(得分:1)

或者您可以使用以下内容(如果a中只有一个值):

s = pd.Series([7,7,8], index=['Cluster 1', 'Cluster 4', 'Cluster 5'])
a = pd.Series(['Cluster 5'], index = [3])

In [42]: 6*(s.index != a.iloc[0])
Out[42]: array([6, 6, 0])

In [43]: s - 6*(s.index != a.iloc[0])
Out[43]:
Cluster 1    1
Cluster 4    1
Cluster 5    8
dtype: int64

In [44]: %timeit s - 6 * ~s.index.isin(a)
10000 loops, best of 3: 166 us per loop

In [45]: %timeit s - 6*(s.index != a.iloc[0])
10000 loops, best of 3: 144 us per loop

它有点快,但只能用于a

中的一个变量