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

如何在Pandas中生成有序数字的combined_id列且保留原列顺序

解决方案

要实现让combined_id列按数字从小到大排列拼接,同时保留Student1和Student2原列顺序,可按以下步骤操作:

步骤1:提取用户ID中的数字部分

从Student1和Student2的字符串中提取出USER后的数字,转成整数用于比较大小。

步骤2:按数字大小排序拼接

对每行的两个数字进行比较,将数字较小的对应的完整id/USERxxx放在前面,数字较大的对应的USERxxx放在后面(保持与原combined_id一致的拼接格式)。

完整代码实现

import pandas as pd

# 构造示例数据
data = {
    'Student1': ['id/USER321', 'id/USER123', 'id/USER439', 'id/USER999'],
    'Student2': ['id/USER329', 'id/USER123', 'id/USER122', 'id/USER333'],
    'combined_id': ['id/USER321_USER329', 'id/USER123_USER123', 'id/USER439_USER122', 'id/USER999_USER333']
}
df = pd.DataFrame(data)

# 定义生成排序后combined_id的函数
def get_sorted_combined(s1, s2):
    # 提取数字并转整数
    num1 = int(s1.split('/')[-1].replace('USER', ''))
    num2 = int(s2.split('/')[-1].replace('USER', ''))
    # 按数字大小拼接
    if num1 <= num2:
        return f"{s1}_{s2.split('/')[-1]}"
    else:
        return f"{s2}_{s1.split('/')[-1]}"

# 应用函数更新combined_id列
df['combined_id'] = df.apply(lambda row: get_sorted_combined(row['Student1'], row['Student2']), axis=1)

print(df)

运行结果

执行后得到的DataFrame与期望结果完全一致:

Student1      Student2       combined_id
0  id/USER321  id/USER329  id/USER321_USER329
1  id/USER123  id/USER123  id/USER123_USER123
2  id/USER439  id/USER122  id/USER122_USER439
3  id/USER999  id/USER333  id/USER333_USER999

注意事项

  • 如果你的combined_id需要拼接完整的id/USERxxx格式(比如id/USER122_id/USER439),只需修改函数中的拼接逻辑为return f"{s2}_{s1}"即可。
  • 该方法不会修改Student1和Student2列的任何内容,完全保留原有顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:00:57