特殊ソート

name
AA-10
AA-9
10
9
10a
09a
A10a-2
A9a-3



df0 = xl("A1:A9", headers=True)

# 数字と文字を分割
df1 = df0["name"].astype(str).str.split("(\d+)", regex=True, expand=True)

# 0補完
df2 = df1.iloc[:, 1::2].apply(lambda s: s.str.zfill(s.fillna("").str.len().max()))

# 上書き
df1.update(df2)

# 文字結合
df0["temp"] = df1.fillna("").astype(str).apply(lambda x: "".join(x), axis=1)

# カスタムソート
def custom_sort(x):
    if x.isnumeric():
        return (0, int(x))
    else:
        return (1, x)

# 数字のみは優先
df0["sort"] = df0["temp"].apply(custom_sort)

df3 = df0.sort_values(by="sort")
df3["name"]