私はこれに戸惑いました。これは非常に簡単ですが、StackOverflowですぐに答えが見つかりませんでした。
df.set_index('xcol')
は、列_'xcol'
_をインデックスにします(dfの列の場合)。
ただし、df.reindex(myList)
は、データフレームの外部、たとえば、別の場所で定義したmyList
という名前のリストからインデックスを取得します。
この投稿がそれを明らかにすることを願っています!この投稿への追加も大歓迎です!
簡単な例で違いを確認できます。このデータフレームを考えてみましょう:
_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が得られます。
df.reindex([1,2])
などの同じインデックス1と2でreindex
を使用する場合、df.reindex([1,2]).loc[1,'b']
を実行すると4.0になります
起こったのは、_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
_は他の値の順序を変更せずに列の値でインデックスを変更しますデータフレーム内
追加するだけで、 set_index
は reset_index
メソッド(多かれ少なかれ):
df = pd.DataFrame({'a': [1, 2],'b': [3, 4]})
print (df)
df.set_index('a', inplace=True)
print(df)
df.reset_index(inplace=True, drop=False)
print(df)
a b
0 1 3
1 2 4
b
a
1 3
2 4
a b
0 1 3
1 2 4
ベンからの素晴らしい答えに加えて。 T、reindex
とset_index
をインデックス列に使用した場合の違いの例をもう1つ挙げたいと思います
import pandas as pd
import numpy as np
testdf = pd.DataFrame({'a': [1, 3, 2],'b': [3, 5, 4],'c': [5, 7, 6]})
print(testdf)
print(testdf.set_index(np.random.permutation(testdf.index)))
print(testdf.reindex(np.random.permutation(testdf.index)))
出力:
set_index
を使用すると、index
列(最初の列)がシャッフルされると、他の列の順序はそのまま維持されますreindex
を使用すると、行の順序はindex
列のシャッフルに応じて変更されます。 a b c
0 1 3 5
1 3 5 7
2 2 4 6
a b c
1 1 3 5
2 3 5 7
0 2 4 6
a b c
2 2 4 6
1 3 5 7
0 1 3 5