熊猫:Reindex Unsorts Dataframe

Dav*_*ang 16 python sorting pandas reindex

我在排序然后重置我在Pandas中的索引时遇到了一些麻烦:

dfm = dfm.sort(['delt'],ascending=False)
dfm = dfm.reindex(index=range(1,len(dfm)))
Run Code Online (Sandbox Code Playgroud)

在重新索引之后,数据帧返回未排序.我的最终目标是有一个排序数据框,索引号从1 - > len(dfm),所以如果有更好的方法,我不介意,

谢谢!

Rya*_*axe 37

而不是重新索引,只需更改实际索引:

dfm.index = range(1,len(dfm) + 1)
Run Code Online (Sandbox Code Playgroud)

然后,这不会改变顺序,只是索引


Phi*_*oud 8

我觉得你误解了什么reindex.它使用传递的索引沿传递的轴选择值,然后填充NaN传递的索引与当前索引不匹配的任何位置.您感兴趣的只是将索引设置为其他内容:

In [12]: df = DataFrame(randn(10, 2), columns=['a', 'delt'])

In [13]: df
Out[13]:
       a   delt
0  0.222 -0.964
1  0.038 -0.367
2  0.293  1.349
3  0.604 -0.855
4 -0.455 -0.594
5  0.795  0.013
6 -0.080 -0.235
7  0.671  1.405
8  0.436  0.415
9  0.840  1.174

In [14]: df.reindex(index=arange(1, len(df) + 1))
Out[14]:
        a   delt
1   0.038 -0.367
2   0.293  1.349
3   0.604 -0.855
4  -0.455 -0.594
5   0.795  0.013
6  -0.080 -0.235
7   0.671  1.405
8   0.436  0.415
9   0.840  1.174
10    NaN    NaN

In [16]: df.index = arange(1, len(df) + 1)

In [17]: df
Out[17]:
        a   delt
1   0.222 -0.964
2   0.038 -0.367
3   0.293  1.349
4   0.604 -0.855
5  -0.455 -0.594
6   0.795  0.013
7  -0.080 -0.235
8   0.671  1.405
9   0.436  0.415
10  0.840  1.174
Run Code Online (Sandbox Code Playgroud)

请记住,如果您想要len(df)在索引中,则必须向端点添加1,因为Python 在构造范围时不包含端点.

  • 像大多数关于`reindex`的答案一样,这再次表明了一个名称`reindex`对于这种方法的作用是多么可怕. (7认同)
  • @PhillipCloud:我会称之为"get",因为它所做的就是根据现有的索引值获取元素.`reindex`意味着您正在为现有值设置新索引. (2认同)