You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将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对应一行数据。

解决方案

通过组内计数+数据重塑即可实现,具体步骤如下:

  1. 为每组内的person_ID添加序号:用groupby().cumcount()给每个ride_ID下的person_ID分配从1开始的序号(默认计数从0开始,需加1调整)。
  2. 重塑数据结构:借助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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:25:17