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

Pandas列值反转问题求助:基于条件生成reversed_id列

解决DataFrame中按分组反转Order_id生成reversed_id的问题

嘿,我明白你的需求了——你想针对每个UserA分组,把Order_id的值做一个反向映射,而不是简单反转整个列的顺序对吧?用lambda x::-1没用是因为它只是把分组里的行顺序倒过来,而不是给每个Order_id匹配对应的反向值。

我给你一个精准的解决方案,分步骤来看:

核心思路

  • 对每个UserA分组,先提取唯一的Order_id并排序,得到一个有序的列表(比如你的例子里是[1,2,3,4,5])
  • 把这个有序列表反转,得到[5,4,3,2,1],然后建立一个映射字典:原Order_id → 反转后对应位置的值
  • 把这个映射应用到分组里的每一行,就能得到正确的reversed_id

完整代码示例

import pandas as pd

# 构造你提供的DataFrame
df = pd.DataFrame({
    'UserA': ['A'] * 8,
    'Order_id': [1, 2, 2, 2, 3, 4, 4, 5]
})

# 定义处理每个分组的函数
def generate_reversed_ids(group):
    # 获取当前分组的唯一Order_id并按升序排序
    sorted_unique_ids = sorted(group['Order_id'].unique())
    # 创建反向映射字典:原id → 反转后的对应id
    reverse_mapping = {
        original_id: sorted_unique_ids[::-1][index]
        for index, original_id in enumerate(sorted_unique_ids)
    }
    # 将每个Order_id映射为对应的reversed_id
    return group['Order_id'].map(reverse_mapping)

# 按UserA分组处理,生成reversed_id列
df['reversed_id'] = df.groupby('UserA').apply(generate_reversed_ids).reset_index(drop=True)

print(df)

运行这段代码后,你会得到和示例完全一致的结果:

UserA Order_id reversed_id
A 1 5
A 2 4
A 2 4
A 2 4
A 3 3
A 4 2
A 4 2
A 5 1

扩展说明

这个方法还支持多用户的场景,比如如果有UserB的Order_id是[10,20,30],那它的reversed_id会自动变成30,20,10,完全不需要额外修改代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:09:24