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

Pandas按双变量分组转嵌套列表及生成多层索引DataFrame

Pandas Groupby 问题解决方案

嘿,我来帮你搞定这两个Pandas分组相关的问题,直接上代码和清晰解释:

问题1:生成嵌套列表(以ID为外层分组)

要得到按ID分组后的嵌套value列表,完全不需要循环,用groupby配合agg(list)就能轻松实现:

import pandas as pd

# 初始化你的DataFrame
df = pd.DataFrame({
 'ID' : ['A','B','C','A','B','C','A','B','C'],
 'date' : [1,1,1,2,2,2,3,3,3],
 'value': [1,2,3,4,5,6,7,8,9]}
)

# 核心操作
nested_list = df.groupby('ID')['value'].agg(list).tolist()
print(nested_list)  # 输出: [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

解释:

  • df.groupby('ID') 按ID列把数据分成A、B、C三个独立分组
  • ['value'].agg(list) 对每个组的value列执行聚合操作,把组内所有值打包成列表
  • .tolist() 把最终得到的Series对象转换成普通的Python嵌套列表

问题2:生成多层索引DataFrame

要得到ID和date作为多层索引的DataFrame,最简单的方式是直接设置多层索引并排序(你的原始数据中每个ID+date组合唯一,刚好适用):

# 生成多层索引DataFrame
multi_index_df = df.set_index(['ID', 'date']).sort_index()
print(multi_index_df)

输出结果完全匹配你期望的格式:

value
ID date         
A  1           1
   2           4
   3           7
B  1           2
   2           5
   3           8
C  1           3
   2           6
   3           9

补充说明:

如果你的数据中存在ID+date重复的情况,可以先用groupby聚合(比如取均值、求和或第一个值)再设置索引,示例代码如下:

# 处理重复数据的情况(示例:取每个ID+date组合的第一个值)
multi_index_df = df.groupby(['ID', 'date'])['value'].first().unstack().stack().reset_index(name='value').set_index(['ID', 'date'])

内容的提问来源于stack exchange,提问作者Nickpick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:55:30