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

pandas dataframe双列排序实现:整数列优先,字母数字列自定义排序

96孔板场景pandas自定义排序实现方案

核心思路是从孔位字符串中拆分出数字后缀、字母前缀两个辅助排序键,再按指定优先级排序即可。

前置说明

以下示例默认你的第一列整数列名为plate_id,第二列孔位列名为well,可自行替换为实际列名。

完整实现代码

import pandas as pd

# 示例测试数据,替换为你自己的DataFrame即可
df = pd.DataFrame({
    'plate_id': [2, 1, 1, 1, 2],
    'well': ['C3', 'B10', 'A2', 'A1', 'B1']
})

# 拆分孔位的前缀字母和后缀数字
df[['well_letter', 'well_num']] = df['well'].str.extract(r'^([A-H])(\d{1,2})$')
# 后缀数字必须转为整数,避免字符串排序时出现"10"排在"2"前的错误
df['well_num'] = df['well_num'].astype(int)

# 按优先级排序:第一优先整数列升序,第二优先孔位数字升序,第三优先孔位字母升序
df_sorted = df.sort_values(by=['plate_id', 'well_num', 'well_letter'], ignore_index=True)

# 可选:删除临时辅助列,仅保留原始数据列
df_sorted = df_sorted[['plate_id', 'well']]

无临时列简化写法(pandas 1.1.0及以上版本支持)

如果不想新增临时辅助列,可以直接在sort_values的key参数中实现排序逻辑:

df_sorted = df.sort_values(
    by=['plate_id', 'well'],
    key=lambda col: col if col.name != 'well' \
        else col.str.extract(r'(\d{1,2})$', expand=False).astype(int),
    ignore_index=True
)

验证说明

上述代码执行后,输出结果会严格符合96孔板业务排序规则:先按板号升序,同板内先按孔位数字从小到大排序,同数字的孔位按字母A到H升序排列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:15:02