我有一个数据框代表未分类的 MTG 卡的集合。如果有人熟悉 MTG,我正在尝试以与集合排序相同的方式对集合进行排序:
我想出了如何使用自定义函数按颜色排序,但我正在努力进行排序。这是我所拥有的:
def get_color_order(color):
color_order = {
"['W']": 1,
"['U']": 2,
"['B']": 3,
"['R']": 4,
"['G']": 5,
"[]": 7,
}
return color_order.get(color, 6)
def get_type_order(card_type):
if card_type.contains("Land"):
return 1
else:
return 0
filtered_df = filtered_df.sort_values(
by=["Colors", "Name", "Type"],
key=[lambda x: x.apply(get_color_order), filtered_df["Name"], lambda y: y.apply(get_type_order)],
)
这里有一个方法:
def get_color_order(color):
color_order = {
"['W']": 1,
"['U']": 2,
"['B']": 3,
"['R']": 4,
"['G']": 5,
"[]": 7,
}
return color_order.get(color, 6)
def get_type_order(card_type):
if card_type == "Land":
return 1
else:
return 0
filtered_df = ( filtered_df
.assign(key_Colors=filtered_df.Colors.apply(get_color_order))
.assign(key_Name=filtered_df.Name)
.assign(key_Type=filtered_df.Type.apply(get_type_order))
.set_index(["key_Type", "key_Colors", "key_Name"])
.sort_index()
.reset_index(drop=True) )
print(filtered_df)
样本输入:
Colors Name Type
0 [] Zeb Land
1 [] Ann Land
2 [] May Other
3 ['G'] Zeb Other
4 ['U'] Ann Other
5 ['B'] May Other
6 ['R'] Zeb Other
7 ['W'] Ann Other
8 ['G'] May Other
9 ['U'] Zeb Other
10 ['B'] Ann Other
11 ['R'] May Other
12 ['W'] Zeb Other
13 ['G'] Ann Other
14 ['U'] May Other
15 ['B'] Joe Other
16 ['R'] Jan Other
17 ['W'] Jeb Other
18 ['B','U','G'] Jen Other
19 ['R','W'] Jed Other
输出:
Colors Name Type
0 ['W'] Ann Other
1 ['W'] Jeb Other
2 ['W'] Zeb Other
3 ['U'] Ann Other
4 ['U'] May Other
5 ['U'] Zeb Other
6 ['B'] Ann Other
7 ['B'] Joe Other
8 ['B'] May Other
9 ['R'] Jan Other
10 ['R'] May Other
11 ['R'] Zeb Other
12 ['G'] Ann Other
13 ['G'] May Other
14 ['G'] Zeb Other
15 ['R','W'] Jed Other
16 ['B','U','G'] Jen Other
17 [] May Other
18 [] Ann Land
19 [] Zeb Land