2017-09-06 16 views
0

itemgetterを使用してPythonでダブルソートを実行しようとしていますが、把握していないようです。私がしたいことは、最初に 'var2'でソートし、次に 'var4'でソートしますが、 'var2'でソートしておくことです。私は(私は別のSO質問から、それを適応)助けるべき次のコードがありますoperator.itemgetterを正しく使用して二重ソートを行うには

df = df[['var1', 'var2', 'var3', 'var4']] 
df = sorted(df, key=operator.itemgetter(1,2)) 

を私は引数がitemgetterのために何を意味するかわかりません。私はそれをそのまま実行しようとしましたが、私が得るのは変数の名前だけです。

私も

df = sorted(df, key=operator.itemgetter(2,4)) 

をやってみましたが、私は次のエラーを取得:「はIndexError:範囲外の文字列インデックスを」。

助けてください。

編集:日付、時間、価格や数:例

私は4つの変数を持っています。私は日付でデータフレームをソートしたいのですが、日付ごとに番号でソートする必要があります。私はこれが理にかなってほしい。

date   time  price number 

09/02/2008 00:20:38 46.0 9987 

09/03/2009 07:00:49 46.65 8551 

07/05/2008 07:00:51 46.75 13681 

08/02/2008 07:00:57 46.75 14022 

09/02/2008 07:01:00 46.75 10270 

09/08/2008 07:01:11 46.75 14850 

09/02/2008 07:01:22 46.75 20568 

08/02/2008 07:01:24 46.75 15683 

09/02/2008 07:02:16 46.65 11698 

答えて

3

operator.itemgetter(a, b, c)はないlambda x: (x[a], x[b], x[c])に、lambda x: x[a][b][c]と同等です。

何が本当にしたいことは次のとおりです。

sorted(df, key=lambda x: (x[1], x[3])) 

はまた、私は1と3にインデックス2と4を変更することに注意してください。 Pythonのインデックスを使用すると、pandasデータフレームではなく、リスト使用しているように見えるので、(次の時間を、あなたの質問にことを言及)0


で始まり、ここであなたは値によってデータフレームを並べ替える方法は次のとおりです。

df.sort_values(['time', 'number']) 

並べ替える列または列の一覧をdf.sort_valuesに呼び出します。これに何も割り当てないでください。 df.sort_valuesはインプレースで動作します。

+0

何とか「x」という名前は定義されていません。私はここで「x」はちょうど何でもよいと思った。私はそれを最初に定義しなければなりませんか? –

+1

@LauraSimonsenLealああ、申し訳ありませんが、私は間違いを犯しました。私は編集でそれを修正しました。 – L3viathan

+0

エラーは 'IndexError:string index of range'に戻りました。 =/ –

関連する問題