【问题标题】:pandas series elementwise muplication熊猫系列元素明智乘法
【发布时间】:2017-11-10 06:50:05
【问题描述】:

我有两个熊猫系列a和b如下:

a = pd.series([1, 2, 3])

b = pd.series([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

我想要的是第三个熊猫系列如下:

[[1, 2, 3], [8, 10, 12], [21, 24, 27]]

我尝试了以下操作:

a*b

np.array(a)*np.array(b)

np.multiple(a, b)

a.multiple(b)

但是,我不断收到以下相同的错误:

TypeError: can't multiply sequence by non-int of type 'float'

我想知道这样做的正确方法是什么?谢谢!

【问题讨论】:

    标签: python pandas multiplication elementwise-operations


    【解决方案1】:

    使用numpy broadcastingdocs

    c = np.array(b.values.tolist()) * a[:,np.newaxis])
    [[ 1  2  3]
     [ 8 10 12]
     [21 24 27]]
    

    或者:

    c = np.array(b.values.tolist()) * a.values.reshape(len(a),-1)
    print (c)
    [[ 1  2  3]
     [ 8 10 12]
     [21 24 27]]
    

    然后:

    s3 = pd.Series(c.tolist())
    print (s3)
    0       [1, 2, 3]
    1     [8, 10, 12]
    2    [21, 24, 27]
    dtype: object
    

    【讨论】:

    • 有效!非常感谢!你能帮我理解为什么我的代码不起作用吗?
    • 我认为你不能使用a.mul(b),因为在 pandas 中没有在列表中实现多个。需要创建带有列表的二维 numpy 数组,然后在这里newaxis 索引运算符将新的axis 插入到a 中,使其成为二维3x1 array
    • 是的,这是有道理的!再次感谢!
    • 不客气!如果我的回答有帮助,请不要忘记 accept 它 - 单击答案旁边的复选标记 () 将其从灰色切换为已填充。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多