当前位置: 首页 > 面试题库 >

pandas:两个数据帧的元素乘法

羊舌承天
2023-03-14
问题内容

我知道如何在两个熊猫数据帧之间进行逐元素乘法。但是,当两个数据框的尺寸不兼容时,事情就变得更加复杂。例如,下面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




 类似资料:
  • 我有一个PySpark数据帧,df1,看起来像: 我有第二个PySpark数据帧,df2 我想将df1的所有列(我有两列以上)与客户ID上的df2连接值相乘

  • 有两个数据帧 输入 df1 df2 映射具有相似列的两个数据帧 从df2获取至少计数为2的匹配列。这里的和与带有2个值的df1匹配 预期产出:

  • 我有两个数据帧df1和df2,其中df2是df1的子集。我如何获得一个新的数据帧(df3),它是两个数据帧之间的差值? 换句话说,一个数据帧,它包含了df1中所有的行/列,而不是DF2中的行/列?

  • 我发现了这个先前的职位,它让我接近。如何将数据帧的列和行的子集转换成数字数组 但是,我需要迭代数据帧,并为“a”中每个正确匹配的值创建一个从列“b”到列“j”的3x3数组(或矩阵),而不是根据第三列中的值创建两列的单个数组(或数组)。 我想要的是两个独立的数组,每个一个 我尝试了以下操作,但收到了一个非常难看的错误。该代码是基于原始帖子的尝试。 这是错误- () ----中的IndexingErr

  • 我需要按行比较两个不同大小的数据帧,并打印出不匹配的行。让我们看以下两个例子: 在df2上按行打印并打印出不在df1中的行的最有效方法是什么。 重要提示:我不希望有行: 包括在差异中: 我已经尝试过了:逐行比较两个不同长度的数据帧,为每行添加相等值的列,比较两个数据帧,并排输出它们的差异 但是这些和我的问题不匹配。

  • 我有一个Pandas数据框架,看起来像这样(有两行的示例): 我需要将所有内容解构为单个标量列,如下所示: 我不太关心新的列名;重要的是将行排列成如上所示的平面向量。 我如何才能做到这一点?