如何在pandas DataFrame中基于指定列的值创建多列新字段
pandas实现长表转指定宽表的方法
完整可运行代码
import pandas as pd # 构造你给出的原始DataFrame raw_df = pd.DataFrame({ 'Name': ['Joe', 'Joe', 'Alba', 'Alba', 'Alba', 'George'], 'Subject': ['Maths', 'Physics', 'Physics', 'Biology', 'Chemistry', 'Linguistics'] }) # 1. 给每个Name分组下的Subject生成顺序编号,拼接成目标列名 raw_df['subject_col'] = 'Subject' + (raw_df.groupby('Name').cumcount() + 1).astype(str) # 2. 透视转换为宽表,缺失值填充为'-',整理格式 result_df = raw_df.pivot( index='Name', columns='subject_col', values='Subject' ).fillna('-').reset_index().rename_axis(columns=None)
运行后result_df就是你需要的目标格式。
关键步骤说明
groupby('Name').cumcount():会按Name分组后,给组内每一行生成从0开始的自增序号,加1后刚好对应Subject1/2/3的后缀,科目顺序和原始数据中的顺序完全一致pivot方法按Name做行索引,刚生成的列名字段做列索引,Subject作为值完成宽表转换fillna('-')把所有缺失值替换为要求的'-',rename_axis(columns=None)用来去掉透视后自动生成的列索引名称,让输出格式更符合要求
内容的提问来源于stack exchange,提问作者vishrut88
相关产品推荐
相关产品推荐

