如何按字母顺序对索引进行排序
How to sort index alphabetically
如何为以下
按字母顺序对 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?
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
如何为以下
按字母顺序对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?
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