我有一個如下所示的凌亂表格,表格內的資料有整數和單詞/字符。我想將表格從Info 5排序到Info 1。
| 水果 | 資訊 1 | 資訊 2 | 資訊 3 | 資訊 4 | 資訊 5 |
|---|---|---|---|---|---|
| 蘋果 | q | z | 2 | ||
| 葡萄 | w | 4 | |||
| 番石榴 | e | 7 | 你 | ||
| 獼猴桃 | r | n | s | 米 |
希望得到如下結果表。
| 水果 | 資訊 1 | 資訊 2 | 資訊 3 | 資訊 4 | 資訊 5 |
|---|---|---|---|---|---|
| 獼猴桃 | r | n | s | 米 | |
| 番石榴 | e | 7 | 你 | ||
| 蘋果 | q | z | 2 | ||
| 葡萄 | w | 4 |
我曾嘗試使用 str.contains,但它無法檢測到整數。
i = ['Fruit', 'Info 1', 'Info 2', 'Info 3', 'Info 4', 'Info 5',]
data[data[i].str.contains('', na=False)
uj5u.com熱心網友回復:
我的解決方案是使用舊 5 列的數字映射創建新的 5 列。這樣更容易排序。關鍵功能是map,還有其他等價物replace
# Step 1/3: create a dictionary to convert alphabet & 0-9 to new number value only:
convert_dict = {'a':1,
'b':2,
'c':3} # You can start filling till z. Then for 0-9 accumulate
# Step 2/3: iterate over 5 columns, create 5 `new {i}` columns that can be used for sort:
for i in range(1,6):
df[f'new {i}'] = df[f'Info {i}'].map(convert_dict)
# Step 3/3: sort
df.sort_values(by=[f'new {i}' for i in range(1,6)], ignore_index=True, inplace=True)
df.drop(columns=[f'new {i}' for i in range(1,6)], inplace=True) # remove if you no longer need
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/482690.html
上一篇:Python中的選擇排序就地作業
