如何按字母表顺序排序索引

3
如何对以下内容的 pandas 索引进行字母排序。
idx = pd.Index(['A1 yes', 'A2 no', 'A3 no', 'A10 yes'])

idx.str[:3].to_series().value_counts().sort_index()

A1  1
A10  1
A3 1

如何将其排序为A1,A3和A10而不是A1,A10和A3?

1个回答

3

使用 natsorted + reindex

from natsort import natsorted

s = idx.str[:3].to_series().value_counts()
s = s.reindex(natsorted(s.index))
print (s)
A1     1
A2     1
A3     1
A10    1
dtype: int64

或者使用extract函数,仅按数字排序:

s = s.iloc[s.index.str.extract('(\d+)', expand=False).astype(int).argsort()]
print (s)
A1     1
A2     1
A3     1
A10    1
dtype: int64

最后,如果想按字符串和数字排序:

df = (s.index.to_series().str.extract('(?P<a>\D+)(?P<b>\d+)', expand=True)
      .assign(b=lambda x: x['b'].astype(int))
      .sort_values(['a','b']))
print (df)
     a   b
A1   A   1
A2   A   2
A3   A   3
A10  A  10

s = s.reindex(df.index)
print (s)
A1     1
A2     1
A3     1
A10    1
dtype: int64

你认为这可能是 https://dev59.com/YV0b5IYBdhLWcg3wIOF9 的重复吗? - SethMMorton
@SethMMorton - 是的,第一部分与 EdChum 的答案相同,第二部分和第三部分不同。所以看起来是重复问题。 - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接