Pandas 按第二个字符的字母顺序对值进行排序
Pandas sort values alphabetically second character
我目前有一个如下所示的数据框列:
Location
CJ111
CJ111
CD111
CD111
BQ111
BQ111
BL111
BL111
我正在使用
df = df.sort_values(by=['Location'], ascending=False)
我希望 df 也按第二个字符排序,例如。
Location
CD111
CD111
CJ111
CJ111
BL111
BL111
BQ111
BQ111
是否可以不使用自定义排序键来实现此目的?
感谢帮助
使用.str[1]
从Series中获取第二个字符,然后使用argsort
获取Positions of values within the sort order,可以进一步用于对原始数据框进行排序:
df.loc[df.Location.str[1].argsort()]
# Location
#2 CD111
#3 CD111
#0 CJ111
#1 CJ111
#6 BL111
#7 BL111
#4 BQ111
#5 BQ111
另一种选择是将 sort_values 与索引一起使用,您以后可以将其用于其他排序等:
完整代码
import pandas as pd
lst = ['CJ111','CJ111','CD111','CD111','BQ111','BQ111','BL111','BL111']
df = pd.DataFrame(lst, columns =['Location'])
df = df.reset_index(drop=True)
idx = df['Location'].str[1:2].sort_values().index
df = df.reindex(idx).reset_index(drop=True)
print(df)
我目前有一个如下所示的数据框列:
Location
CJ111
CJ111
CD111
CD111
BQ111
BQ111
BL111
BL111
我正在使用
df = df.sort_values(by=['Location'], ascending=False)
我希望 df 也按第二个字符排序,例如。
Location
CD111
CD111
CJ111
CJ111
BL111
BL111
BQ111
BQ111
是否可以不使用自定义排序键来实现此目的?
感谢帮助
使用.str[1]
从Series中获取第二个字符,然后使用argsort
获取Positions of values within the sort order,可以进一步用于对原始数据框进行排序:
df.loc[df.Location.str[1].argsort()]
# Location
#2 CD111
#3 CD111
#0 CJ111
#1 CJ111
#6 BL111
#7 BL111
#4 BQ111
#5 BQ111
另一种选择是将 sort_values 与索引一起使用,您以后可以将其用于其他排序等:
完整代码
import pandas as pd
lst = ['CJ111','CJ111','CD111','CD111','BQ111','BQ111','BL111','BL111']
df = pd.DataFrame(lst, columns =['Location'])
df = df.reset_index(drop=True)
idx = df['Location'].str[1:2].sort_values().index
df = df.reindex(idx).reset_index(drop=True)
print(df)