如果有,如何更改系列中的标志:
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会导致内存错误。
答案 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