从 pandas 系列中减去一个数字,特定元素除外

subtracting a number from pandas series except specific element

我有一个这样的 pandas 系列。

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)

您可以使用布尔掩码。首先在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

或者您可以使用以下方法(如果 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

中的一个变量一起使用