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
相关产品推荐
相关产品推荐

