如何在Python中同时遍历多数组创建表格的id关联分数列?
大行数下按索引聚合数组的解决方案
针对大行数场景下直接用zip遍历效率低甚至内存溢出的问题,推荐用pandas矢量化操作+分块处理的方案,高效适配大数据量:
核心思路
因为每行的ids数组内容固定,我们可以先把scores数组按索引拆分成独立列,再按索引位置收集所有行的对应分数,最后和对应的id关联。
代码实现(常规数据量)
import pandas as pd # 1. 加载原始数据(实际可从CSV/Excel读取) data = { "ids": [[0,1,22,56,204]]*7, "scores": [ [0.98, 0.56, 0.078, 0.23, 1.45], [0.68, 0.666, 3.56, 5.6, 0.078], [0.665, 0.298, 4.66, 0.0004, 0.45], [5.34, 1.34, 4.34, 0.23, 0.90], [0.009, 0.45, 1.22, 5.67, 2.23], [0.56, 0.67, 5.56, 1.64, 0.088], [0.34, 0.934, 3.42, 3.33, 0.40] ] } df = pd.DataFrame(data) # 2. 拆分scores数组为独立列 scores_df = pd.DataFrame(df["scores"].tolist(), columns=[f"score_{i}" for i in range(5)]) # 3. 按索引聚合分数,关联对应id result = [] # 所有行的ids一致,直接取第一行的ids列表 target_ids = df["ids"].iloc[0] for idx, id_val in enumerate(target_ids): # 收集所有行中该索引的分数 score_list = scores_df[f"score_{idx}"].tolist() result.append({"id": id_val, "id_wise_scores": score_list}) # 转成结果表格 result_df = pd.DataFrame(result) print(result_df)
超大数据量适配(分块读取)
如果数据行数达到百万级以上,用分块读取避免内存占满:
import pandas as pd # 预先定义要收集的id(和原始数据的ids数组一致) target_ids = [0,1,22,56,204] # 初始化每个id对应的分数列表 score_dict = {id_val: [] for id_val in target_ids} # 分块读取数据,chunk_size根据内存调整 chunk_size = 10000 for chunk in pd.read_csv("your_data_file.csv", chunksize=chunk_size): # 拆分当前块的scores数组为列 chunk_scores = pd.DataFrame(chunk["scores"].tolist(), columns=[f"score_{i}" for i in range(5)]) # 遍历每个索引,追加分数到对应id的列表 for idx, id_val in enumerate(target_ids): score_dict[id_val].extend(chunk_scores[f"score_{idx}"].tolist()) # 生成结果表格 result_df = pd.DataFrame([{"id": k, "id_wise_scores": v} for k, v in score_dict.items()])
结果验证
运行后得到的result_df就是你需要的格式:
| id | id_wise_scores |
|---|---|
| 0 | [0.98, 0.68, 0.665, 5.34, 0.009, 0.56, 0.34] |
| 1 | [0.56, 0.666, 0.298, 1.34, 0.45, 0.67, 0.934] |
| 22 | [0.078, 3.56, 4.66, 4.34, 1.22, 5.56, 3.42 ] |
| 56 | [0.23, 5.6, 0.0004, 0.23, 5.67, 1.64, 3.33] |
| 204 | [1.45, 0.078, 0.45, 0.90, 2.23, 0.088, 0.40] |
内容的提问来源于stack exchange,提问作者sonia
相关产品推荐
相关产品推荐

