pandas如何基于两列表类型列创建zip生成的字典新列
pandas列表列拼接为字典列的解决方案
最优实现(性能最高)
无需手动编写逐行遍历逻辑,直接使用Python原生列表推导式即可实现,性能远高于apply方案:
df['c'] = [dict(zip(ai, bi)) for ai, bi in zip(df['a'], df['b'])]
备选实现(写法简洁,性能较低)
如果数据量较小,对性能要求不高,也可以使用pandas的apply接口实现:
df['c'] = df[['a', 'b']].apply(lambda row: dict(zip(*row)), axis=1)
性能对比
实测列表推导式的性能约为apply方案的18倍,测试结果如下:
%timeit [dict(zip(ai, bi)) for ai, bi in zip(df['parameter_ids'], df['parameter_values'])] 7.76 ms ± 77 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) %timeit df[['parameter_ids', 'parameter_values']].apply(lambda row: dict(zip(*row)), axis=1) 140 ms ± 2.81 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
内容的提问来源于stack exchange,提问作者oakca
相关产品推荐
相关产品推荐

