pandas dataframe python中的行有多行

时间:2017-07-17 19:44:39

标签: pandas numpy dataframe

对于具有多行的pandas DataFrame中的列,我想创建一个新列,该列具有指定行数的行,这些行形成前一列行的子级别。我尝试这样做是为了创建一个包含值范围的大数据矩阵作为模型的输入。

作为一个例子,我有一个小的DataFrame,如下所示:

df:
    A
1   1
2   2
3   3
.   ..

对于这个DataFrame,我想在' A'中添加每行3行。 DataFrame的列,形成一个名为' B'的新列。结果应该是这样的:

df:
    A   B
1   1   1
2   1   2
3   1   3
4   2   1
5   2   2
6   2   3
7   3   1
8   3   2
9   3   3
.   ..  ..

我尝试了各种各样的事情,其中​​列表理解与if语句相结合,并使用某些东西迭代DataFrame中的行,如iterrows(),然后追加'新行对我来说似乎是最合乎逻辑的,但我无法完成它。尤其是“A'”的重复。列的行。

有谁知道怎么做?

任何建议都表示赞赏,非常感谢提前

3 个答案:

答案 0 :(得分:2)

我认为您需要numpy.repeatnumpy.tileDataFrame构造函数:

df = pd.DataFrame({'A':np.repeat(df['A'].values, 3), 
                   'B':np.tile(df['A'].values, 3)})
print (df)
   A  B
0  1  1
1  1  2
2  1  3
3  2  1
4  2  2
5  2  3
6  3  1
7  3  2
8  3  3

答案 1 :(得分:2)

In [28]: pd.DataFrame({'A':np.repeat(df.A.values, 3), 'B':np.tile(df.A.values,3)})
Out[28]:
   A  B
0  1  1
1  1  2
2  1  3
3  2  1
4  2  2
5  2  3
6  3  1
7  3  2
8  3  3

答案 2 :(得分:1)

这是另一种NumPy方法,np.repeat创建一个列,然后将其重新用于另一个列 -

In [282]: df.A
Out[282]: 
1    4
2    9
3    5
Name: A, dtype: int64

In [288]: r = np.repeat(df.A.values[:,None],3,axis=1)

In [289]: pd.DataFrame(np.c_[r.ravel(), r.T.ravel()], columns=[['A','B']])
Out[289]: 
   A  B
0  4  4
1  4  9
2  4  5
3  9  4
4  9  9
5  9  5
6  5  4
7  5  9
8  5  5