17

Pandas でインデックスを並べ替えてからリセットするのに問題があります。

dfm = dfm.sort(['delt'],ascending=False)
dfm = dfm.reindex(index=range(1,len(dfm)))

インデックスを再作成した後、データフレームはソートされずに返されます。私の最終的な目標は、インデックス番号が 1 --> len(dfm) の並べ替えられたデータフレームを作成することです。そのため、より良い方法があれば、気にしません。

ありがとう!

4

2 に答える 2

38

インデックスを再作成する代わりに、実際のインデックスを変更するだけです。

dfm.index = range(1,len(dfm) + 1)

次に、順序は変更されず、インデックスのみが変更されます

于 2013-09-18T17:16:30.650 に答える
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

インデックスに入れたい場合len(df)は、エンドポイントに 1 を追加する必要があることに注意してください。これは、Pythonが range を構築するときにエンドポイントを含まないためです。

于 2013-09-18T17:17:02.020 に答える