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

Python中如何转置DataFrame指定两列并保留首行得到目标宽表

Pandas 分组追加次行字段实现方案

核心逻辑是按ID、Name分组后,分别提取每组首行和次行的Date、Color字段,单元素分组直接复用自身字段值即可,具体实现代码如下:

import pandas as pd

# 原始DataFrame
df = pd.DataFrame({
        'ID': [12, 12, 15, 15, 16, 17, 17],
        'Name': ['A', 'A', 'B', 'B', 'C', 'D', 'D'],
        'Date':['2019-12-20' ,'2018-12-20' ,'2017-12-20' , '2016-12-20', '2015-12-20', '2014-12-20', '2013-12-20'],
        'Color':['Black', 'Blue', 'Red' , 'Yellow' , 'White' , 'Sky' , 'Green']
    })

# 可选步骤:如果原始数据同组内顺序不确定,先按日期降序排序,保证最新日期排在组内第一行
df = df.sort_values(['ID', 'Name', 'Date'], ascending=[True, True, False])

# 分组聚合得到结果
result = df.groupby(['ID', 'Name'], as_index=False).agg(
    Date=('Date', 'first'),
    Color=('Color', 'first'),
    Date_=('Date', lambda x: x.iloc[1] if len(x) >= 2 else x.iloc[0]),
    Color_=('Color', lambda x: x.iloc[1] if len(x) >= 2 else x.iloc[0])
)

print(result)

说明

  • 上述代码兼容单元素分组(如示例中ID为16的分组)的场景,会自动复用首行值填充新增列
  • 如果你的原始数据已经保证同组内前两行就是你需要的目标行,且顺序正确,可以跳过排序步骤
  • 如果同组内存在超过2行的情况,可以自行调整lambda中的索引取值逻辑,比如取最后一行的话把x.iloc[1]改成x.iloc[-1]即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:54:07