您可以通过一个简单的示例看到差异。让我们考虑以下数据帧:
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.0df.reindex([1,2]).loc[1,'b']
发生的事情是,set_index
用(1,2)(“ a”列中的值)替换了先前的索引(0,1),而没有触及“ b”列中的值的顺序
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
将使用列的值更改索引,而无需触及数据框中其他值的顺序