将Pandas DataFrame的person_ID列按ride_ID分组拆分为多列
解决Pandas将groupby后的person_ID拆分为多列的问题
需求说明
现有大型Pandas DataFrame,包含ride_ID和person_ID两列,每个唯一ride_ID对应的person_ID数量不固定(2到100个不等)。需要按ride_ID分组后,将每组的person_ID拆分为person_ID1至person_IDn的多列,每个ride_ID对应一行数据。
解决方案
通过组内计数+数据重塑即可实现,具体步骤如下:
- 为每组内的person_ID添加序号:用
groupby().cumcount()给每个ride_ID下的person_ID分配从1开始的序号(默认计数从0开始,需加1调整)。 - 重塑数据结构:借助
pivot将序号转为列名,person_ID作为对应列的值,最终得到目标格式。
代码示例
import pandas as pd # 模拟示例数据 data = { 'ride_ID': ['ride_1', 'ride_1', 'ride_1', 'ride_2', 'ride_2', 'ride_3', 'ride_3', 'ride_3', 'ride_3'], 'person_ID': ['person1', 'person2', 'person3', 'person1', 'person4', 'person1', 'person5', 'person2', 'person3'] } df = pd.DataFrame(data) # 步骤1:添加组内序号 df['person_num'] = df.groupby('ride_ID').cumcount() + 1 # 步骤2:重塑数据并重命名列 result = df.pivot(index='ride_ID', columns='person_num', values='person_ID') result.columns = [f'person_ID{col}' for col in result.columns] result = result.reset_index() print(result)
输出结果
ride_ID person_ID1 person_ID2 person_ID3 person_ID4 0 ride_1 person1 person2 person3 NaN 1 ride_2 person1 NaN NaN person4 2 ride_3 person1 person2 person3 person5
补充说明
- 针对大型DataFrame,该方法效率较高,
pivot和groupby都是Pandas优化过的核心操作。 - 分组后数量不足的位置会自动填充
NaN,完全匹配需求格式。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

