如何将DataFrame中每个唯一ID对应内容转换为独立列表变量?
解决方案:为每个ID生成独立的列名-值列表变量
没问题,我来帮你实现这个需求——把DataFrame里每个ID对应的M开头列转成指定格式的列表,还能自动生成对应独立变量。
首先,我们先还原你的示例DataFrame:
import pandas as pd # 构造你的示例数据 df = pd.DataFrame({ "ID": ["E001", "E002", "E003"], "M001": [3, 4, 4], "M002": [4, 5, 3], "M003": [3, 5, 5], "M004": [2, 3, 4] })
接下来,我们可以通过遍历DataFrame的每一行,动态生成目标变量:
# 遍历每一行数据 for _, row in df.iterrows(): # 获取当前行的ID id_label = row["ID"] # 筛选出所有以"M"开头的列,生成[列名, 对应值]的嵌套列表 result_list = [[col, row[col]] for col in df.columns if col.startswith("M")] # 动态创建以 {ID}_response 命名的变量 globals()[f"{id_label}_response"] = result_list
执行完这段代码后,你就能得到三个独立的变量:E001_response、E002_response、E003_response,完全符合你要的格式。我们可以验证一下:
print(E001_response) # 输出:[['M001', 3], ['M002', 4], ['M003', 3], ['M004', 2]] print(E002_response) # 输出:[['M001', 4], ['M002', 5], ['M003', 5], ['M004', 3]]
补充说明
如果你的ID数量很多,动态创建大量全局变量可能会导致代码维护困难,这时更推荐用字典来统一存储所有结果:
responses_dict = {} for _, row in df.iterrows(): id_label = row["ID"] responses_dict[id_label] = [[col, row[col]] for col in df.columns if col.startswith("M")] # 调用方式:responses_dict["E001"]
内容的提问来源于stack exchange,提问作者user12225102
相关产品推荐
相关产品推荐

