私はこれに困惑しました。これは非常に単純なことですが、StackOverflow ですぐに答えを見つけることができませんでした。
df.set_index('xcol')
列'xcol'
をインデックスにします (df の列の場合)。df.reindex(myList)
ただし、はデータフレームの外部、たとえばmyList
別の場所で定義した という名前のリストからインデックスを取得します。
ただし、df.reindex(myList)
値も NA に変更されます。簡単な代替方法は次のとおりです。df.index = myList
この投稿でそれが明確になれば幸いです。この投稿への追加も歓迎します。
ベストアンサー1
簡単な例で違いがわかります。次のデータフレームを考えてみましょう。
df = pd.DataFrame({'a': [1, 2],'b': [3, 4]})
print (df)
a b
0 1 3
1 2 4
インデックスは0と1です
set_index
列 'a' で使用する場合、インデックスは 1 と 2 になります。 を使用するとdf.set_index('a').loc[1,'b']
、3 になります。
reindex
ここで、同じインデックス1と2、例えば を使用したい場合df.reindex([1,2])
、次のようにすると4.0が得られます。df.reindex([1,2]).loc[1,'b']
set_index
何が起こったかというと、列 'b' の値の順序を変更せずに、以前のインデックス (0,1) を (1,2) (列 'a' の値) に置き換えたのです。
df.set_index('a')
b
a
1 3
2 4
インデックスは変更されますがreindex
、元のDFのインデックスに関連付けられた列 'b' の値は保持されます。
df.reindex(df.a.values).drop('a',1) # equivalent to df.reindex(df.a.values).drop('a',1)
b
1 4.0
2 NaN
# drop('a',1) is just to not care about column a in my example
最後に、reindex
各インデックスに関連付けられた行の値を変更せずにインデックスの順序を変更しますが、はset_index
データフレーム内の他の値の順序に触れることなく、列の値でインデックスを変更します。