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
相关产品推荐
相关产品推荐

