我有一个像这样的熊猫系列。
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)
答案 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