根据自定义字典对数据帧进行排序

Sort dataframe based on custom dictionary

提问人:Zakyl 提问时间:7/5/2022 更新时间:7/5/2022 访问量:109

问:

我拥有的数据帧是:

df = pd.DataFrame(data={'Question':['Q2','Q2','Q1','Q1','Q1','Q3','Q3','Q3'],
                    'Answer':['Yes','No','$1 to $49','$100 to $200','$50 to $100','More than 5000','Less than 5000','Don't know']})

我想按列和 .我创建了一个自定义字典,用于排序方式,以便可以相应地对分类值进行排序。QuestionAnswerAnswer

answer_sort_order = {'$1 to $49': 0, '$50 to $100': 1, '$50 to $99': 2, '$100 to $200': 3,'More than 5000': 4, 'Less than 5000': 5, 'Don't Know': 6}

如何使用它来获取如下所示的数据帧?

enter image description here

我还可以指定仅将字典用于其中 is 和answer_sort_orderQuestionQ1Q3

python-3.x pandas 帧数据 操作

评论

1赞 Quang Hoang 7/5/2022
df.iloc[np.argsort(df['Answer'].map(answer_sort_order))]
0赞 Zakyl 7/6/2022
@QuangHoang这不会按预期对数据帧进行排序

答:

1赞 mozway 7/5/2022 #1

您可以使用 sort_values 的参数:key

out = df.sort_values('Answer', key=pd.Series(answer_sort_order).reindex)

艺术

out = df.sort_values('Answer', key=lambda x: x.map(answer_sort_order))

输出:

  Question          Answer
2       Q1       $1 to $49
4       Q1     $50 to $100
3       Q1    $100 to $200
5       Q3  More than 5000
6       Q3  Less than 5000
0       Q2             Yes
1       Q2              No
7       Q3      Don't know

评论

0赞 Zakyl 7/5/2022
谢谢!然后我可以做一个排序out =out.sort_values('Question')Question
1赞 mozway 7/5/2022
是的,您还可以通过管道执行这两个操作:out = df.sort_values('Answer', key=lambda x: x.map(answer_sort_order)).sort_values('Question')
0赞 Zakyl 7/6/2022
您能否更新代码,以便我定义为仅使用字典仅对问题进行排序并正常对其余问题进行排序?因为正如你所看到的,问题没有得到排序(它应该是出现在顶部的记录,以及出现在它之后的记录)answer_sort_orderQ1Q3Q2NoYes