我这里有一小部分数据:
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。
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
试试这个:
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
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()