假设有一个名为df的数据框,其中'col2'是要按照升序数字排序的列,而'col1'是要按照列表中的列进行排序的列,排序列表为sort_order_list。
import pandas as pd
df = pd.DataFrame({'col1': ['B', 'B', 'A', 'A'], 'col2': [2, 1, 2, 1]})
sort_order_list = ['B', 'A']
df_sorted = df.loc[df['col1'].isin(sort_order_list)].sort_values(by=['col1'], key=lambda x: pd.Series(x).isin(sort_order_list)).reset_index(drop=True)
df_sorted.sort_values(by=['col2'], inplace=True)
print(df_sorted)
输出结果:
col1 col2 0 A 1 1 B 1 2 A 2 3 B 2
代码解释:
这个解决方法通过两步实现了排序。首先,使用isin方法来判断'col1'中的值是否在排序列表中出现过,从而将数据框分成两个部分,一个是要进行排序的部分,另一个是不需要排序的部分。根据排序列表中的顺序,使用lambda函数来将排序列表中的值映射到数据框的值上,然后按照新生成的Series进行排序。
接下来,在得到根据列表顺序排序后的数据框后,我们再次使用sort_values将其中的'col2'按照升序数字进行排序。最后,我们打印排序后的数据框以查看结果。
上一篇:按照列表中的类别对列进行分组
下一篇:按照列表中的每个日期后的“X天”