使用pd.get_dummies()处理DataFrame时保留Message值并实现数据透视
解决方案
核心思路
你的需求是将**多个连续的Sequence序列(从1起始)**转换为宽表,关键在于先识别每个独立的序列组,再通过透视表完成行列转换。pd.get_dummies()仅能生成哑变量标记,无法保留Message的实际值,因此不适用。
实现步骤&代码
import pandas as pd # 构造你的示例DataFrame data = { 'Sequence': [1,2,3,4,1,2,3,4,5,1,2,3], 'Message': ['A','B','C','D','A','C','D','E','F','A','C','D'] } df = pd.DataFrame(data) # 1. 生成分组ID:每次遇到Sequence=1时,组号递增,区分不同序列组 df['group_id'] = (df['Sequence'] == 1).cumsum() # 2. 透视转换为宽表:以组为行,Sequence为列,填充对应Message值 wide_df = df.pivot(index='group_id', columns='Sequence', values='Message') # 3. 可选:补充目标列(比如你示例中的6、7列),缺失值留空 target_max_col = 7 wide_df = wide_df.reindex(columns=range(1, target_max_col + 1)) # 4. 清理索引和列名,贴合目标格式 wide_df = wide_df.reset_index(drop=True) wide_df.columns.name = None print(wide_df)
输出结果
1 2 3 4 5 6 7 0 A B C D NaN NaN NaN 1 A C D E F NaN NaN 2 A C D NaN NaN NaN NaN
(注:空值显示NaN,若需要替换为空白字符串,可添加wide_df = wide_df.fillna(''))
内容的提问来源于stack exchange,提问作者Alex_Y
相关产品推荐
相关产品推荐

