将列中的每个值乘以行python

问题描述 投票:0回答:3

我这里有一小部分数据:

import pandas as pd

days = [1, 2, 3]

time = [2, 4, 2, 4, 2, 4, 2, 4, 2]

df1 = pd.DataFrame(days)

df2 = pd.Series(time)

df2 = df2.transpose()

df3 = df1*df2

df1 是一列数据,df2 是一行数据。我需要一个 3x9 的数据框,其中行乘以列中的每个值以形成一个大数据框。 最终结果应如下所示:

df3 = [2  4  2  4  2  4  2  4  2
       4  8  4  8  4  8  4  8  4
       6  12 6  12 6  12 6  12 6 ]

我目前将其用于较大的数据集,只有少数数据点被正确相乘,大多数都是 nan。

python pandas dataframe multidimensional-array
3个回答
2
投票

Dot(product) 是这个问题的解决方案之一

import pandas as pd
days = [1, 2, 3]
time = [2, 4, 2, 4, 2, 4, 2, 4, 2]
df1 = pd.DataFrame(days)
df2 = pd.DataFrame(time)
# use dot 
df3 = df1.dot(df2.T)
df3

输出

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

1
投票

试试这个:

df1.dot(df2.to_frame().T)

输出:

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

0
投票
import openpyxl

wb = openpyxl.load_workbook("pyram1.xlsx")
ws = wb['Sheet1']
lista = []
lista2 = []
lista3 = []


for i in range(2, ws.max_column + 1):
    e = ws.cell(row=1, column=i)
    lista.append(e.value)
for i in range(2, ws.max_row + 1):
    w = ws.cell(row=i, column=1)
    lista2.append(w.value)
    # lista3.append(e.value * w.value)
f = ws.max_column-1
v = ws.max_row-1
for i in range(1, len(lista)):
    q = ws.cell(row=1 + i, column=f + 1)
for i in range(2, ws.max_row + 1):
    for k in range(2, ws.max_column + 1):
        e = ws.cell(row=1, column=k)
        w = ws.cell(row=i, column=1)
        c = ws.cell(row=i, column=k)
        c.value = e.value * w.value

wb.save("pyram1.xlsx") wb.close()

© www.soinside.com 2019 - 2024. All rights reserved.