我尝试创建一个整数序列,在每次重复后向列表中添加常量偏移量时多次重复列表中的元素。
我有一个包含许多列的pandas数据框,这些列是关于相同N
个人的重复信息块。例如,列可以是[age1,age2,age3,... ageN,height1,height2,height3,... heightN,...],我想要与个体1和4相关联的列(例如)。我想为特定个体生成列索引,以便我可以使用df.iloc[:, cindices]
对数据框进行子集化。
以下代码有效,但它非常难看,我希望有一个更清晰,更清晰的解决方案(更多Pythonic)。
subjects = [1, 4]
N = 11; repeats = 3
columns = np.array([(np.arange(repeats) * N + i) for i in subjects])
cindices = columns.T.flatten()
# Information for individuals 1 & 4 are in these columns:
>> array([ 1, 4, 12, 15, 23, 26])
答案 0 :(得分:2)
此处是解决方案的numpythonic
版本
(np.array(subjects)[None, :] + N*np.arange(repeats)[:, None]).ravel()
[None, :]
并非绝对必要,但为了清楚起见,我将其保留了下来。
如果您将一个支持numpy的运算符(例如broadcasting
)应用于具有形状的数组,例如(1,2)和(3,1)numpy将会发生+
使用'右边的'返回一个(3,2)数组。在细胞中总和。
ravel
使数组变平。