如何以向量化或单行代码方式合并两个DataFrame生成字典格式单元格?
问题与解决方案
问题
现有两个Pandas DataFrame:
df1 = pd.DataFrame({"col1": [1, 2, 3], "col2": [4, 5, 6], "col3":[7, 8, 9]})
和
df2 = pd.DataFrame({"colA": [10, 20, 30], "colB": [40, 50, 60], "colC":[70, 80, 90]})
需要将二者按位置合并,生成新DataFrame,每个单元格格式为{df1对应值: df2对应值},预期结果如下:
col1 col2 col3 {1:10} {2:20} {3:30} {4:40} {5:50} {6:60} {7:70} {8:80} {9:90}
由于数据量极大,需避免循环或apply类低效方案,采用向量化或单行高效代码实现。
最优解决方案
使用Numpy的vectorize函数实现元素级的字典构造,结合Pandas生成结果DataFrame,这是适合大数据量的高效向量化方案:
import pandas as pd import numpy as np df1 = pd.DataFrame({"col1": [1, 2, 3], "col2": [4, 5, 6], "col3":[7, 8, 9]}) df2 = pd.DataFrame({"colA": [10, 20, 30], "colB": [40, 50, 60], "colC":[70, 80, 90]}) # 单行高效代码 result = pd.DataFrame(np.vectorize(lambda x, y: {x: y})(df1.values, df2.values), columns=df1.columns)
方案说明
np.vectorize会将传入的lambda函数应用到两个数组(df1.values和df2.values)的对应元素上,实现元素级的字典构造,底层借助Numpy的优化机制,比纯Python循环或applymap快得多。- 最终用生成的二维数组构造新DataFrame,沿用
df1的列名,完全符合需求格式。
内容的提问来源于stack exchange,提问作者Himanshu Poddar
相关产品推荐
相关产品推荐

