PandasDataFrameオブジェクトのインデックスを再定義する


84

私はパンダDataFrameオブジェクトのインデックスを再作成しようとしています。

From:
            a   b   c
        0   1   2   3
        1  10  11  12
        2  20  21  22

To :
           b   c
       1   2   3
      10  11  12
      20  21  22

私は以下に示すようにこれについて行っていますが、間違った答えを得ています。これを行う方法についての手がかりはありますか?

>>> col = ['a','b','c']
>>> data = DataFrame([[1,2,3],[10,11,12],[20,21,22]],columns=col)
>>> data
    a   b   c
0   1   2   3
1  10  11  12
2  20  21  22
>>> idx2 = data.a.values
>>> idx2
array([ 1, 10, 20], dtype=int64)
>>> data2 = DataFrame(data,index=idx2,columns=col[1:])
>>> data2
     b   c
1   11  12
10 NaN NaN
20 NaN NaN

なぜこれが起こっているのか考えはありますか?


1
1番目のDFを使用して2番目のDFを構築しているため、これはidx2がdata.indexと交差する行のみを取得します。行1
RuiDC

回答:


188

単純にset_indexメソッドを使ってみませんか?

In : col = ['a','b','c']

In : data = DataFrame([[1,2,3],[10,11,12],[20,21,22]],columns=col)

In : data
Out:
    a   b   c
0   1   2   3
1  10  11  12
2  20  21  22

In : data2 = data.set_index('a')

In : data2
Out:
     b   c
a
1    2   3
10  11  12
20  21  22

17
元の例のように、インデックス名を削除するには:data2.index.name = None
Daniele

5

インデックスに「a」を含めたくない場合

で:

col = ['a','b','c']

data = DataFrame([[1,2,3],[10,11,12],[20,21,22]],columns=col)

data

でる:

    a   b   c
0   1   2   3
1  10  11  12
2  20  21  22

で:

data2 = data.set_index('a')

でる:

     b   c
a
1    2   3
10  11  12
20  21  22

で:

data2.index.name = None

でる:

     b   c
 1   2   3
10  11  12
20  21  22

1
2番目のアウトは正しくありません。0を含む左側の名前の列、1、2まだある
Yster
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.