为啥在i=1 j=0 相乘就错了
df.iloc[i*4:i*4+4,j]*m1
这个时候乘法结果是8个值
import pandas as pd
import numpy as np
df = pd.DataFrame(np.ones((16,4)))
m0 = pd.DataFrame(np.arange(4))
m = pd.DataFrame(np.zeros((4,4)))
for i in range(4):
m.iloc[:,i] = m0
m1 = m.iloc[:,0]
df2 = pd.DataFrame(np.zeros_like(df))
for i in range(4):
for j in range(4):
tmp = df.iloc[i*4:i*4+4,j]
df2.iloc[i*4:i*4+4,j] = df.iloc[i*4:i*4+4,j]*m1
print(df2)
1个回答
pandas的乘法是要index对应的,index不对应,当然会有问题啊
i, j = 1, 0
display(df.iloc[i*4:i*4+4,j])
得到的结果的Index是4,5,6,7
m1的Index是0,1,2,3
两者没有交集,乘出来的结果的Index是0,1,...,7,而且全都是NaN
正确的操作应该是转成numpy array再相乘
df.iloc[i*4:i*4+4,j].values * m1.values