在Pandas中基于两个数组生成所有组合求和结果的DataFrame
最优实现方案(基于numpy广播,性能最高)
利用numpy底层的广播机制直接完成批量求和,全程在C层运算,性能远高于Python层遍历实现,代码非常简洁:
import pandas as pd import numpy as np arr1 = [1,2,3] arr2 = [5,10] # 将arr2转为列向量后与arr1做广播求和,直接生成符合要求的二维结果矩阵 result_matrix = np.array(arr2)[:, np.newaxis] + np.array(arr1) # 转换为DataFrame,同时设置列名、索引为对应元素的字符串格式 df = pd.DataFrame(result_matrix, columns=map(str, arr1), index=map(str, arr2))
打印df即可得到你预期的输出:
| 1 | 2 | 3 | |
|---|---|---|---|
| 5 | 6 | 7 | 8 |
| 10 | 11 | 12 | 13 |
纯Pandas实现方案
如果不想引入numpy依赖,也可以用Pandas的内置加法运算实现:
import pandas as pd arr1 = [1,2,3] arr2 = [5,10] # 分别构造行向量DataFrame和列向量DataFrame df_row = pd.DataFrame([arr1], columns=arr1) df_col = pd.DataFrame(arr2, index=arr2) # 利用Pandas的广播加法得到结果 df = df_col.add(df_row) # 调整列名和索引格式为字符串 df.columns = df.columns.astype(str) df.index = df.index.astype(str)
两种方案都完全不需要写遍历逻辑,数组长度越大,性能优势越明显。
内容的提问来源于stack exchange,提问作者Crigges
相关产品推荐
相关产品推荐

