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

分组生成新DataFrame时,如何添加值来源的标识列?

解决方案

你可以调整原有代码,结合melt函数同时提取值和对应的来源列名,具体实现如下:

import pandas as pd

# 初始化你的原始DataFrame A
df = pd.DataFrame({
    'Col A': [1000, 1000, 2000, 2000],
    'Col B': [100, 100, 200, 200],
    'Col C': [10, 20, 30, 40]
})

# 生成目标DataFrame B
out = (df.groupby('Col A', group_keys=False, sort=False)
         # 对每个分组逆序列,再转成窄表自动保留来源列名
         .apply(lambda d: d.iloc[:, ::-1].melt(var_name='Col C', value_name='Col A & B'))
         # 去除重复的(值+来源)组合
         .drop_duplicates(subset=['Col A & B', 'Col C'])
         .reset_index(drop=True)
         # 调整列顺序匹配需求
         [['Col A & B', 'Col C']]
)

print(out)

代码说明:

  • groupby('Col A', sort=False):保持原数据的分组顺序,避免打乱结果的排列逻辑。
  • d.iloc[:, ::-1]:将每个分组的列逆序(从Col C到Col A),确保提取顺序和你需要的输出一致。
  • melt(...):把宽表转为窄表,var_name存储原列名(即值的来源),value_name存储对应的值。
  • drop_duplicates(...):去除重复的数值-来源组合,避免原数据中重复行导致的冗余结果。

运行后得到的结果完全匹配你给出的DataFrame B:

Col A & BCol C
10Col C
20Col C
100Col B
1000Col A
30Col C
40Col C
200Col B
2000Col A

内容的提问来源于stack exchange,提问作者John Mark Johnson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:20:24