Python Pandas DataFrame Series 自定义排序


场景:对 DataFrame 中数字列绝对值进行排序。

pd.DataFrame([6, -5, 4, -2, 3], columns=['digital'])

结构图为:


sort_0

1. 解决方法 1

  1. 生成一个名为『temp_sort』临时的列,使用 abs() 将数值绝对值化;
  2. 对 DataFrame.sort_values() 对列 temp_sort 进行排序;
  3. 删除临时列 temp_sort。
df = pd.DataFrame([6, -5, 4, -2, 3], columns=['digital'])
df['temp_sort'] = abs(df['digital'])
new_df = df.sort_values(by=['temp_sort']).drop(columns=['temp_sort'])
new_df

结果图:


sort_1

2. 解决方法 2

  1. 通过 Series.apply() 将数据转成我们需要绝对值,并将得到的数值替换成 df.index;
  2. 通过 sort_index 对 index 排序即可得到我们想到的数据。
df = pd.DataFrame([6, -5, 4, -2, 3], columns=['digital']) 
df.index = df['digital'].apply(abs).tolist()
new_df = df.sort_index()
new_df

结果图:


sort_2

3. 解决方法 3

  1. 使用 Series.map() 得到自定义排序后的参数;
  2. 使用 numpy.argsort() 得到排序后的位置;
  3. 利用步骤 2 中得到的数值 ,并使用 DataFrame.reindex() 根据 index 的位置从新排序。
df = pd.DataFrame([6, -5, 4, -2, 3], columns=['digital'])
sort_ser = df['digital'].map(lambda x: abs(x))
re_index = np.argsort(sort_ser)
new_df = df.reindex(re_index.values.tolist())
new_df

结果图:


sort_3

你可能感兴趣的:(Python Pandas DataFrame Series 自定义排序)