pandas の df.reindex() メソッドと df.set_index() メソッドの違い 質問する

pandas の df.reindex() メソッドと df.set_index() メソッドの違い 質問する

私はこれに困惑しました。これは非常に単純なことですが、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データフレーム内の他の値の順序に触れることなく、列の値でインデックスを変更します。

おすすめ記事