我正在尝试使用itemgetter在python中进行双重排序,但我似乎无法掌握它。我想要做的是先按照' var2'排序。然后由' var4',但保持按' var2'排序。我有以下应该有用的代码(我从另一个SO问题改编而来):
df = df[['var1', 'var2', 'var3', 'var4']]
df = sorted(df, key=operator.itemgetter(1,2))
但我不确定这些参数对于itemgetter意味着什么。我尝试按原样运行它,但我得到的只是变量'名。
我也尝试过做
df = sorted(df, key=operator.itemgetter(2,4))
但是我收到以下错误:' IndexError:字符串索引超出范围'。
请帮忙。
编辑:示例
我有四个变量:日期,时间,价格和数字。我想按日期对数据框进行排序,但在每个日期内我想按数字对其进行排序。我希望这是有道理的。
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
答案 0 :(得分:3)
operator.itemgetter(a, b, c)
相当于lambda x: x[a][b][c]
,而不是lambda x: (x[a], x[b], x[c])
。
你真正想要的是:
sorted(df, key=lambda x: (x[1], x[3]))
另请注意,我将索引2和4更改为1和3; Python索引从0开始。
由于您似乎使用的是pandas
数据框,而不是列表(下次请在您的问题中提及),以下是按字母排序DataFrame的方式:
df.sort_values(['time', 'number'])
使用列或列列表调用df.sort_values
进行排序。不要把它分配给任何东西; df.sort_values
就地工作。