You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pandas按首字符与数值对多列数据进行排序

问题解决方法

你当前代码直接对name列排序是按完整字符串的字典序计算,zeta的第二个字符e比zxta的第二个字符x字典序更小,所以排序结果不符合预期。


方案1:使用sort_values的key参数(Pandas 1.1.0及以上版本推荐,无需新增临时列)

import pandas as pd

# 读取测试数据,给两列设置列名name、val
df = pd.read_csv("testdat.csv", header=None, names=["name", "val"])

# 排序逻辑:name列仅取第一个字符参与排序,val列正常按数值排序
df_sorted = df.sort_values(
    by=["name", "val"],
    key=lambda col: col.str[0] if col.name == "name" else col,
    ascending=[True, True]
)

# 输出验证
print(df_sorted)

方案2:新增临时首字符列(兼容所有Pandas版本)

import pandas as pd

df = pd.read_csv("testdat.csv", header=None, names=["name", "val"])

# 新增首字符临时列
df["first_char"] = df["name"].str[0]
# 按首字符、val升序排序后删除临时列
df_sorted = df.sort_values(by=["first_char", "val"], ascending=[True, True]).drop(columns="first_char")

print(df_sorted)

运行以上代码得到的输出和你期望的结果一致:

name  val
2  beta    5
1  zxta    1
0  zeta    3

内容的提问来源于stack exchange,提问作者tbsnsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:36:06