如何通过For循环从指定DataFrame生成目标嵌套列表?
基于DataFrame生成指定嵌套列表
原始DataFrame定义
import pandas as pd data={'column1':[1,1,1,1,1,1,1,1,2,2,2,2],'person':['A','A','A','A','B','B','B','B','C','C','C','C'],'location1':['GOA','BANGLORE','GOA','BANGLORE','BANGLORE','DELHI','BANGLORE','DELHII','KOCHI','DELHI','DELHI','KOCHI'],'location2':['BANGLORE','GOA','GOA','BANGLORE','DELHI','DELHI','BANGLORE','BANGLORE','DELHI','KOCHI','DELHI','KOCHI'],'time':[20,40,0,0,34,0,0,23,21,56,0,0]} df = pd.DataFrame(data)
需求
根据上述DataFrame生成按column1分组,再按person分组的嵌套列表结构,每个person对应的行数据以[location1, location2, time]的子列表形式存在。
尝试的代码(未完成需求)
for i in set(df.column1): for j in set(df.person): col=['location1','location2','time'] print(df[col].values.tolist())
解决方案
以下代码可实现目标嵌套结构,核心逻辑是先按column1筛选分组,再在每个组内按person筛选,最后提取指定列转为子列表:
# 初始化最终嵌套列表 nested_result = [] # 遍历column1的唯一值(排序保证顺序一致) for col1_val in sorted(df['column1'].unique()): # 存储当前column1下的所有person组 col1_group = [] # 筛选当前column1对应的所有行 col1_subset = df[df['column1'] == col1_val] # 遍历当前column1下的person唯一值(排序保证顺序) for person_val in sorted(col1_subset['person'].unique()): # 筛选当前person对应的行,提取指定列转为列表 person_rows = col1_subset[col1_subset['person'] == person_val][['location1', 'location2', 'time']].values.tolist() col1_group.append(person_rows) nested_result.append(col1_group) # 输出结果 print(nested_result)
代码说明
- 用
sorted(df['column1'].unique())获取有序的column1唯一值,避免集合遍历的无序性; - 对每个column1值,筛选出对应行后,再遍历该子集内的person唯一值;
- 针对每个person,提取
location1、location2、time三列的数据,转为二维列表后加入对应分组; - 最终形成column1组 → person组 → 行数据子列表的三层嵌套结构。
内容的提问来源于stack exchange,提问作者Mathew John
相关产品推荐
相关产品推荐

