【问题标题】:Multiplying each row of a pandas dataframe by another row dataframe将熊猫数据帧的每一行乘以另一行数据帧
【发布时间】:2022-01-15 20:19:59
【问题描述】:

所以我想将数据帧的每一行与乘数向量相乘,我正在管理,但它看起来很难看。这可以改进吗?

import pandas as pd
import numpy as np


# original data
df_a = pd.DataFrame([[1,2,3],[4,5,6]])
print(df_a, '\n')

# multiplier vector
df_b = pd.DataFrame([2,2,1])
print(df_b, '\n')

# multiply by a list - it works
df_c = df_a*[2,2,1]
print(df_c, '\n')

# multiply by the dataframe - it works
df_c = df_a*df_b.T.to_numpy()
print(df_c, '\n')

【问题讨论】:

  • 由于你的数据框的形状不同,我不知道你怎么能做到这一点。

标签: python pandas dataframe numpy


【解决方案1】:

“看起来很丑”是主观的,也就是说,如果你想将数据帧的所有行与你需要的其他东西相乘:

  • 兼容形状的数据框(和兼容的索引,因为它们在 pandas 中的操作之前对齐,这就是为什么 df_a*df_b.T 仅适用于公共索引:0

  • 一维向量,在 pandas 中是一个系列

使用系列:

df_a*df_b[0]

输出:

   0   1  2
0  2   4  3
1  8  10  6

当然,如果你真的不需要 2D 容器,最好直接定义一个系列:

s = pd.Series([2,2,1])
df_a*s

【讨论】:

    【解决方案2】:

    为了美,你可以使用Einstein summation

    >>> np.einsum('ij,ji->ij', df_a, df_b)
    
    array([[ 2,  4,  3],
           [ 8, 10,  6]])
    

    【讨论】:

      猜你喜欢
      • 2015-08-28
      • 2013-11-18
      • 1970-01-01
      • 2021-05-08
      • 2020-05-12
      • 2020-05-30
      • 1970-01-01
      • 2018-08-18
      • 2020-05-22
      相关资源
      最近更新 更多