如下图所示,我想按Type
的字母顺序对聊天进行排序。但是,我不想弄乱每个[Date , User_id]
中Chat name
的顺序。鉴于输入数据框位于左侧,我该怎么办? (在python中使用Pandas)
答案 0 :(得分:2)
您要使用a stable sorting algorithm来对值进行排序,这是mergesort:
df.sort_values(by='Type', kind='mergesort')
来自链接的答案:
如果两个对象相等,则说排序算法是稳定的 键在排序输出中的显示顺序与它们在 输入数组进行排序。
来自pandas docs:
种类:{“快速排序”,“合并排序”,“堆排序”},默认为“快速排序”
选择排序算法。另请参阅ndarray.np.sort 信息。 mergesort是唯一稳定的算法。对于DataFrame, 此选项仅在对单个列或标签进行排序时适用。
更新:正如@ALollz正确指出的那样,最好先将所有值都转换为小写,然后再进行排序(即,否则,“ Bird”将放在“ aligator”之前结果):
df['temp'] = df['Type'].str.lower()
df = df.sort_values(by='temp', kind='mergesort')
df = df.drop('temp', axis=1)
答案 1 :(得分:1)
df.sort_values(by=['Type']) [1]
您可以执行自己的排序功能[2],可以将string直接比较stringRow2 [1] https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sort_values.html
[2] Sort pandas DataFrame with function over column values