場景:對 DataFrame 中數(shù)字列絕對值進行排序沉颂。
pd.DataFrame([6, -5, 4, -2, 3], columns=['digital'])
結構圖為:
sort_0
1. 解決方法 1
- 生成一個名為『temp_sort』臨時的列赁严,使用 abs() 將數(shù)值絕對值化;
- 對 DataFrame.sort_values() 對列 temp_sort 進行排序价捧;
- 刪除臨時列 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
- 通過 Series.apply() 將數(shù)據(jù)轉成我們需要絕對值,并將得到的數(shù)值替換成 df.index皿淋;
- 通過 sort_index 對 index 排序即可得到我們想到的數(shù)據(jù)招刹。
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
- 使用 Series.map() 得到自定義排序后的參數(shù);
- 使用 numpy.argsort() 得到排序后的位置窝趣;
- 利用步驟 2 中得到的數(shù)值 疯暑,并使用 DataFrame.reindex() 根據(jù) 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