如何在Python中按分组展平Pandas DataFrame?
Pandas按ID展平多行数据为单行
假设你的原始DataFrame如下:
import pandas as pd df = pd.DataFrame({ 'id': [1,1,2,2,3,3], 'c1': ['A','C','E','G','I','K'], 'c2': ['B','D','F','H','J','L'] })
方法一:分组后展平列表
通过groupby按ID分组,将每组的非ID列值展平为一维列表,再拆分到多列中:
# 分组并展平每组数据 grouped = df.groupby('id').apply(lambda x: x.drop('id', axis=1).values.flatten()) # 转换为DataFrame并重置索引 result = pd.DataFrame(grouped.tolist(), index=grouped.index).reset_index() print(result)
方法二:利用序号unstack
先给每个ID内的行添加序号,再通过unstack将多行转为多列:
# 添加组内行序号 df['row_num'] = df.groupby('id').cumcount() # 设置多级索引并unstack unstacked_df = df.set_index(['id', 'row_num']).unstack() # 移除列的上层索引并重置索引 result = unstacked_df.droplevel(0, axis=1).reset_index() print(result)
两种方法都能得到你需要的结果,输出的列名可根据需求修改或直接忽略。
内容的提问来源于stack exchange,提问作者Fredrik
相关产品推荐
相关产品推荐

