提问人:Zakyl 提问时间:7/5/2022 更新时间:7/5/2022 访问量:109
根据自定义字典对数据帧进行排序
Sort dataframe based on custom dictionary
问:
我拥有的数据帧是:
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']})
我想按列和 .我创建了一个自定义字典,用于排序方式,以便可以相应地对分类值进行排序。Question
Answer
Answer
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}
如何使用它来获取如下所示的数据帧?
我还可以指定仅将字典用于其中 is 和answer_sort_order
Question
Q1
Q3
答:
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_order
Q1
Q3
Q2
No
Yes
评论
df.iloc[np.argsort(df['Answer'].map(answer_sort_order))]