【问题标题】:Pandas Dataframe multiply with a column of another dataframe熊猫数据框与另一个数据框的列相乘
【发布时间】:2022-01-23 09:06:12
【问题描述】:

有没有办法将数据帧的一行的每个元素乘以另一个数据帧的特定列的同一行的元素。

例如,这样:

df1:

1 2 3
2 2 2
3 2 1

和df2:

x 1 b
z 2 c
x 4 a

结果

1  2  3
4  4  4
12 8  4

所以基本上这样df1[i,:] * df2[i,j] = df3[i,:]

【问题讨论】:

    标签: python pandas dataframe multiplication


    【解决方案1】:

    给你。 我创建了一个变量,允许您选择要与第一个数据帧中的数字相乘的第二个数据帧的哪一列。

    arr1 = np.array(df1) # df1 to array
    
    which_df2col_to_multiply = 0  # select col from df2
    arr2 = np.array(df2)[:, which_df2col_to_multiply ] # selected col to array
    
    print(np.transpose(arr2*arr1))  # result
    

    这是输出:

    [[1 2 3]
    [4 4 4]
    [12 8 4]]
    

    【讨论】:

    • 这种方法不适用于不同形状的数据框,例如。 500x3 和 500x100 矩阵,对吧?
    • 但是根据您的要求,您想将单个列与另一个数据框相乘,在这种情况下,这并不重要。
    • 我得到的错误 "ValueError: 操作数不能与形状一起广播 (531,) (​​531,128)
    【解决方案2】:

    将第一个df乘以第二个df的列

    假设您的列名是0,1,2

    df1.mul(df2[1],0)
    

    输出

        0  1  2
    0   1  2  3
    1   4  4  4
    2  12  8  4
    

    【讨论】:

    • 不幸的是我得到“KeyError:1”
    • 就像我说的,假设您的列名是 0,1,2 只需将 1 替换为您要使用的 df2 中的列名
    • 我的错误。 '1' 而不是 1 解决了这个错误。但是现在我得到了一个数据框,其行数是应有的两倍,并且每个元素都是 = NaN
    猜你喜欢
    • 2012-10-21
    • 2020-04-06
    • 1970-01-01
    • 2018-01-24
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 2017-09-28
    相关资源
    最近更新 更多