2016-06-27 3 views
1

例:パンダでは、列名を参照する代わりに列インデックスを使用してset_indexを設定する方法はありますか?

2つの列['A'、 'B']を持つPandas DataFrame fooがあります。

は私もfoo.set_index([[0,.1]])を試してみました foo.set_index([0,1]) 代わりの foo.set_index(['A', 'B'])

のような機能をしたいが、このエラーで来た:

長の不一致:期待軸は、9つの要素を持って、新しい値は、2つの要素を持っています

答えて

1

ユニークの場合:

df.set_index(list(df.columns[cols])) 

ここで、colsは序数のリストです。


例えば、

In [77]: np.random.seed(2016) 

In [79]: df = pd.DataFrame(np.random.randint(10, size=(5,4)), columns=list('ABCD')) 

In [80]: df 
Out[80]: 
    A B C D 
0 3 7 2 3 
1 8 4 8 7 
2 9 2 6 3 
3 4 1 9 1 
4 2 2 8 9 

In [81]: df.set_index(list(df.columns[[0,2]])) 
Out[81]: 
    B D 
A C  
3 2 7 3 
8 8 4 7 
9 6 2 3 
4 9 1 1 
2 8 2 9 

データフレームの列インデックスが一意でない場合は、ラベル によってインデックスを設定すると、より複雑不可能と序である:

import numpy as np 
import pandas as pd 
np.random.seed(2016) 

def set_ordinal_index(df, cols): 
    columns, df.columns = df.columns, np.arange(len(df.columns)) 
    mask = df.columns.isin(cols) 
    df = df.set_index(cols) 
    df.columns = columns[~mask] 
    df.index.names = columns[mask] 
    return df 

df = pd.DataFrame(np.random.randint(10, size=(5,4)), columns=list('AAAA')) 
print(set_ordinal_index(df, [0,2])) 

収量

 A A 
A A  
3 2 7 3 
8 8 4 7 
9 6 2 3 
4 9 1 1 
2 8 2 9 
関連する問題