将pandas数据框列中的每个值与第二数据框列中的所有值相乘,并用结果数组替换每个第一数据框值

时间:2020-09-04 18:06:58

标签: python pandas dataframe

我有一个包含4行3列的数据框,并且第一个数据框(df1)中的所有值都是浮点数。我还具有第二个数据框(df2),该数据框具有包含8760个条目的列。我想将第一个数据帧第3列中的每个值乘以第二个数据帧中的所有8760个值。最后,我想用8760个值的结果序列替换第一个数据帧中的原始值(将每个值乘以第二个数据帧值)。因此,第一个数据帧每一行的第3列中的值是8760个值的结果数组。

data = {'col1':[1.0, 2.0, 1.0, 3.0], 'col2':[.01, .04, .8, 1.0], 'col3':[0.7, 0.1, 0.5, 0.9]}
np.random.seed(123)

df1 = pd.DataFrame(data) 
df2 = pd.DataFrame(np.random.randint(0,10, size=(1,8760)))

所以在这里,我想将df1中的col3的每个值取而代之,方法是将该值乘以df2中的所有8760个值,并将结果数组替换掉。因此,如果将0.7乘以df2中的每个值,就会用8760个值的数组替换“ 0.7”。是否有捷径可寻?当我尝试时,我只是在df1中获得了第一个值或NAN,而不是数组。

1 个答案:

答案 0 :(得分:0)

我们可以在此处使用numpy广播:

df1['result'] = (df1['col3'].to_numpy()[:, None] * df2.to_numpy()[0]).tolist()

结果:

    col1 col2   col3    result
0   1.0  0.01   0.7     [1.4, 1.4, 4.2, 0.7, 2.1, 6.3, 4.2, 0.7, 0.0, ...
1   2.0  0.04   0.1     [0.2, 0.2, 0.6, 0.1, 0.3, 0.9, 0.6, 0.1, 0.0, ...
2   1.0  0.80   0.5     [1.0, 1.0, 3.0, 0.5, 1.5, 4.5, 3.0, 0.5, 0.0, ...
3   3.0  1.00   0.9     [1.8, 1.8, 5.4, 0.9, 2.7, 8.1, 5.4, 0.9, 0.0, ...
相关问题