生成重复的整数序列,同时在每次重复后添加偏移量

时间:2017-02-16 12:48:36

标签: python pandas numpy sequence repeat

我尝试创建一个整数序列,在每次重复后向列表中添加常量偏移量时多次重复列表中的元素。

我有一个包含许多列的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])

1 个答案:

答案 0 :(得分:2)

此处是解决方案的numpythonic版本

(np.array(subjects)[None, :] + N*np.arange(repeats)[:, None]).ravel()

[None, :]并非绝对必要,但为了清楚起见,我将其保留了下来。

如果您将一个支持numpy的运算符(例如broadcasting)应用于具有形状的数组,例如(1,2)和(3,1)numpy将会发生+使用'右边的'返回一个(3,2)数组。在细胞中总和。

ravel使数组变平。