【问题标题】:smart way to multiply two lists to make a python dataframe [duplicate]将两个列表相乘以制作python数据框的智能方法[重复]
【发布时间】:2019-05-11 02:48:04
【问题描述】:

我有两个数据列表,分别是:

 a = [1,1,1, 0,0,0]
 b = [9,8,7, 6,5,4]

我想要的输出是:

df = [[9,9,9, 0,0,0],
       [8,8,8, 0,0,0],
       [7,7,7, 0,0,0],
       [6,6,6, 0,0,0],
       [5,5,5, 0,0,0],
       [4,4,4, 0,0,0]]

我目前正在做的事情是这样的:

for aa in a:

    counter = 0

    df = pd.DataFrame()

    while counter<len(b): 

        df[counter] = pd.Series(b)*a[counter]

        counter+=1

这看起来,绝对是低效的。

在我的实际应用中,a 和 b 的大小非常大,所以效率问题就出现了。

任何聪明有效的方法来解决这个问题?任何建议将不胜感激

提前谢谢你!

【问题讨论】:

  • 你试过numpy.matmulab 的倒数吗?
  • 'a' 和 'b' 的原始尺寸是否与您提供的示例相似?
  • @bunbun 我没试过,我也会试一试
  • @Marmik Shah 实际上会完全不同
  • @H.Choi 啊!提供的答案很好。但通常当你想构建一个矩阵时,在大多数情况下复杂度将是 O(row * column)。这是因为您正在创建行 * 列值。

标签: python list dataframe


【解决方案1】:

您可以使用外部产品 np.outer 并使用结果初始化 pandas 数据框:

import numpy as np
import pandas as pd

a = [1,1,1, 0,0,0]
b = [9,8,7, 6,5,4]

pd.DataFrame(np.outer(b, a))

   0  1  2  3  4  5
0  9  9  9  0  0  0
1  8  8  8  0  0  0
2  7  7  7  0  0  0
3  6  6  6  0  0  0
4  5  5  5  0  0  0
5  4  4  4  0  0  0

【讨论】:

  • 哇!非常感谢!优雅而高效的答案:)
猜你喜欢
  • 2013-02-03
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
  • 2017-09-04
  • 2015-06-28
  • 1970-01-01
相关资源
最近更新 更多