对于以下数组:
import numpy as np
arr = np.array([[i for i in range(10)] for j in range(5)])
# arr example
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
对于arr
中的每一行,我试图根据某个2d数组(例如2)交换 n (在这种情况下为2)索引。
swap = np.random.choice(arr.shape[1], [arr.shape[0], 2], replace=False)
# swap example
array([[8, 1],
[5, 0],
[7, 2],
[9, 4],
[3, 6]])
我尝试了arr[:, swap] = arr[:, swap[:, ::-1]]
,但这会为每一行执行每次交换,而不是仅逐行交换索引。我尝试实现的行为如下。无需迭代swap
就能做到吗?
for idx, s in enumerate(swap):
arr[idx, s] = arr[idx, s[::-1]]
# new arr with indices swapped
array([[0, 8, 2, 3, 4, 5, 6, 7, 1, 9],
[5, 1, 2, 3, 4, 0, 6, 7, 8, 9],
[0, 1, 7, 3, 4, 5, 6, 2, 8, 9],
[0, 1, 2, 3, 9, 5, 6, 7, 8, 4],
[0, 1, 2, 6, 4, 5, 3, 7, 8, 9]])
答案 0 :(得分:3)
您可以使用“帮助器”数组来索引df['index'] = (df['return'].astype(float)
.div(100)
.add(1)
.mask(df['industry'].ne(df['industry'].shift()),100)
.groupby(df['industry'])
.cumprod())
print(df)
date industry return index
0 01/01/2020 energy 0.5 100.0
1 01/02/2020 energy 0.1 100.1
2 01/01/2020 technology 1.2 100.0
3 01/02/2020 technology 0.5 100.5
4 01/01/2020 healthcare 0.1 100.0
5 01/02/2020 healthcare 1.2 101.2
。助手将arr
强制转换为正确的形状。
arr