如何用Pandas更高效地将DataFrame按key转为嵌套字典?
Pandas高效转换DataFrame为指定格式字典
原始DataFrame
import pandas as pd df = pd.DataFrame({ "key": ["a", "b", "b", "c", "c", "c"], "var1": [1, 2, 3, 4, 5, 6], "var2": ["x", "y", "x", "y", "x", "y"], })
对应表格:
| key | var1 | var2 |
|---|---|---|
| a | 1 | x |
| b | 2 | y |
| b | 3 | x |
| c | 4 | y |
| c | 5 | x |
| c | 6 | y |
转换需求
将DataFrame转换为以唯一key值为顶级键,其余列(var1和var2)组成记录列表的字典,预期输出:
{ "a": [{"var1": 1, "var2": "x"}], "b": [{"var1": 2, "var2": "y"}, {"var1": 3, "var2": "x"}], "c": [{"var1": 4, "var2": "y"}, {"var1": 5, "var2": "x"}, {"var1": 6, "var2": "y"}], }
现有低效实现
通过循环遍历唯一key值筛选子DataFrame,处理大型数据时速度较慢:
result = {} for key in df["key"].unique(): key_df = df[df["key"] == key] result[key] = key_df.drop("key", axis=1).to_dict(orient="records")
高效Pandas风格实现
利用groupby分组后结合apply和to_dict(orient='records')实现,这是Pandas原生优化的操作,处理大数据集时性能远优于循环:
result = df.groupby('key').apply(lambda x: x.drop('key', axis=1).to_dict(orient='records')).to_dict()
原理说明
groupby('key'):按key列对DataFrame进行分组,Pandas内部会高效处理分组逻辑,避免循环中的重复筛选操作。apply(lambda x: ...):对每个分组的子DataFrame执行转换,去掉key列后转为记录格式的字典列表。to_dict():将分组结果直接转为目标格式的字典。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

