熊猫通过将列表中的每个元素与其他每个元素相乘来创建DataFrame

时间:2019-12-18 22:29:28

标签: python pandas dataframe

我需要用从单个列表构建的矩阵填充数据框,但是数学和python语法超出了我的范围。我基本上需要执行一些数学运算,就好像行和列都是相同的列表一样。

所以它应该看起来像这样。...

#Input
list = [1,2,3,4]

create a matrix using some math on the list, like matrix[i,j] = list[i] * list[j]

#output
np.matrix([[1,2,3,4], [2,4,6,8], [3,6,9,12], [4,8,12,16]])

df = pd.dataframe[np.matrix]

2 个答案:

答案 0 :(得分:2)

广播乘法将在这里工作:

arr = np.array([1, 2, 3, 4])
pd.DataFrame(arr * arr[:,None])    

   0  1   2   3
0  1  2   3   4
1  2  4   6   8
2  3  6   9  12
3  4  8  12  16

或者,大多数numpy算术函数定义一个.outer unfunc:

pd.DataFrame(np.multiply.outer(arr, arr))

   0  1   2   3
0  1  2   3   4
1  2  4   6   8
2  3  6   9  12
3  4  8  12  16

答案 1 :(得分:1)

data = [1,2,3,4]

嵌套循环有效:

import numpy as np
a = []
for n in data:
    row = []
    for m in data:
        math = some_operation_on(m,n)
        row.append(math)
    a.append(row)

a = np.array(a)

对于像您的示例这样的简单操作,请使用numpy.meshgrid

In [21]: a = [1,2,3,4]

In [22]: x,y = np.meshgrid(a,a)

In [23]: x*y
Out[23]: 
array([[ 1,  2,  3,  4],
       [ 2,  4,  6,  8],
       [ 3,  6,  9, 12],
       [ 4,  8, 12, 16]])