python - Pandas:两个数据帧的元素乘法

标签 python pandas multiplication dataframe

我知道如何在两个 Pandas 数据帧之间进行逐个元素的乘法运算。但是,当两个数据框的尺寸不兼容时,事情会变得更加复杂。例如下面的 df * df2 很简单,但是 df * df3 是一个问题:

df = pd.DataFrame({'col1' : [1.0] * 5, 
                   'col2' : [2.0] * 5, 
                   'col3' : [3.0] * 5 }, index = range(1,6),)
df2 = pd.DataFrame({'col1' : [10.0] * 5, 
                    'col2' : [100.0] * 5, 
                    'col3' : [1000.0] * 5 }, index = range(1,6),)
df3 = pd.DataFrame({'col1' : [0.1] * 5}, index = range(1,6),)

df.mul(df2, 1) # element by element multiplication no problems

df.mul(df3, 1) # df(row*col) is not equal to df3(row*col)
   col1  col2  col3
1   0.1   NaN   NaN
2   0.1   NaN   NaN
3   0.1   NaN   NaN
4   0.1   NaN   NaN
5   0.1   NaN   NaN

在上述情况下,如何将 df 的每一列与 df3.col1 相乘

我的尝试:我尝试复制 df3.col1 len(df.columns.values) 次来获得一个数据帧与 df 相同的维度:

df3 = pd.DataFrame([df3.col1 for n in range(len(df.columns.values)) ])
df3
        1    2    3    4    5
col1  0.1  0.1  0.1  0.1  0.1
col1  0.1  0.1  0.1  0.1  0.1
col1  0.1  0.1  0.1  0.1  0.1

但这会创建一个尺寸为 3 * 5 的数据框,而我在 5*3 之后。我知道我可以使用 df3.T() 进行转置来获得我需要的东西,但我认为这不是最快的方法。

最佳答案

In [161]: pd.DataFrame(df.values*df2.values, columns=df.columns, index=df.index)
Out[161]: 
   col1  col2  col3
1    10   200  3000
2    10   200  3000
3    10   200  3000
4    10   200  3000
5    10   200  3000

关于python - Pandas:两个数据帧的元素乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21022865/

相关文章:

r - 将向量中的每个元素与自身相乘以创建矩阵

c# - 非常大的整数的快速乘法

python - 递归collections.defaultdict初始化

python - 需要使用 iLoc 的功能,但对于字典值(文本)

python - 如何将多个项目 append 到 pandas df?

python - 如何获取 Pandas 时间序列中一个月的所有行,无论年份如何?

java - BigInteger 时间最优化的乘法

python - 将上下文管理器与 multiprocessing.Manager 一起使用有什么好处?

python - 使用 poetry 和 pip 安装私有(private)仓库的依赖

Python:除了以数字开头的字符串之外,是否有单行脚本来标题大小写字符串?