更改熊猫系列中数字的符号

时间:2019-01-10 08:08:18

标签: python pandas time-series series

如果有,如何更改系列中的标志:

  

1、2、3、4、5、6、7、8、9、10、11、12、13

并需要获得:

  

1、2、3,-4,-5,-6、8、9、10,-11,-12,-13

我需要能够设置周期(现在等于3)和函数开始的索引(现在等于3)。

例如,如果我指定2作为索引,则得到

  

1、2,-3,-4,-5、6、8、9,-10,-11,-12、13

我需要依次将此功能应用于每一列,因为应用于整个DataFrame会导致内存错误。

1 个答案:

答案 0 :(得分:3)

对布尔掩码使用numpy.where和(//)进行整数除以(%)的布尔掩码:

s = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13])

N = 3
#if default RangeIndex
m = (s.index // N) % 2 == 1
#general index
#m = (np.arange(len(s.index)) // N) % 2 == 1
s = pd.Series(np.where(m, -s, s))
print (s)
0      1
1      2
2      3
3     -4
4     -5
5     -6
6      7
7      8
8      9
9    -10
10   -11
11   -12
12    13
dtype: int64

编辑:

N = 3
M = 1
m = np.concatenate([np.repeat(False, M), 
                   (np.arange(len(s.index) - M) // N) % 2 == 0])

s = pd.Series(np.where(m, -s, s))
print (s)
0      1
1     -2
2     -3
3     -4
4      5
5      6
6      7
7     -8
8     -9
9    -10
10    11
11    12
12    13
dtype: int64