2017-07-17 14 views
4

複数の行を持つpandas DataFrameの列に対して、前の列の行のサブレベルを構成する新しい列を作成したいとします。私は後でモデルの入力として値の範囲を含む大きなデータ・マトリックスを作成するためにこれを試しています。次のように私は小さなデータフレームを有する例としてpandasデータフレームの行の複数の行python

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

このデータフレームには、私は」という名前の新しい列を形成し、データフレームの「A」の列に行ごとに3行を追加したいですB '。私はリスト内包がiterrows()、その後「APPEND」新しいのようなデータフレーム内の行を反復処理するために何かを使用してifの文と合わせて、そのいろいろなことを試してみました

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 
. .. .. 

:結果はこのようなものでなければなりません行は私にとって最も論理的なようですが、私はそれをやり遂げることはできません。特に 'A'列の重複。

誰でもこれを行う方法を知っていますか?任意の提案が高く評価され

、私はあなたがDataFrameコンストラクタでnumpy.repeatnumpy.tileが必要だと思う事前

+0

リピートの数が代わりに「4」だったら何を出力する必要がありますか? – Divakar

+0

投稿されたソリューションのいずれかがうまく機能しましたか? – Divakar

答えて

2

の多くの感謝:

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 
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 
1

は、ここに1つの列を作成するためにnp.repeatを持つ別のnumpyのの方法だと、その後他の人に再利用する -

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 
関連する問題