【问题标题】:Multiply dataframe with values from other dataframe将数据框与其他数据框的值相乘
【发布时间】:2017-08-21 16:32:02
【问题描述】:

我有两个数据框

df1 = pd.DataFrame([[1,2],[3,4],[5,6],[7,8]], index = ['a','b','c', 'a'], columns = ['d','e'])
   d  e
a  1  2
b  3  4
c  5  6
a  7  8


df2 = pd.DataFrame([['a', 10],['b',20],['c',30],['f',40]])


   0   1
0  a  10
1  b  20
2  c  30
3  f  40

我希望我的最终数据帧将 df1 的行乘以与 df2 中的值对应的因子(例如,b 为 20)

所以我的输出应该看起来像

     d    e
a   10   20
b   60   80
c  150  180
a   70   80

请提供一个假设 df1 长度为数百行的解决方案。我只能想到遍历 df1.index。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    使用set_indexreindexdf2df1 对齐,然后将mul 对齐

    In [1150]: df1.mul(df2.set_index(0).reindex(df1.index)[1], axis=0)
    Out[1150]:
         d    e
    a   10   20
    b   60   80
    c  150  180
    a   70   80
    

    【讨论】:

      【解决方案2】:

      创建mapping 并调用df.apply

      In [1128]: mapping = dict(df2.values)
      
      In [1129]: df1.apply(lambda x: x * mapping[x.name], 1)
      Out[1129]: 
           d    e
      a   10   20
      b   60   80
      c  150  180
      a   70   80
      

      【讨论】:

        【解决方案3】:

        IIUC:

        In [55]: df1 * pd.DataFrame(np.tile(df2[[1]],2), columns=df1.columns, index=df2[0])
        Out[55]:
             d    e
        a   10   20
        a   70   80
        b   60   80
        c  150  180
        

        助手 DF:

        In [57]: pd.DataFrame(np.tile(df2[[1]],2), columns=df1.columns, index=df2[0])
        Out[57]:
            d   e
        0
        a  10  10
        b  20  20
        c  30  30
        

        【讨论】:

          【解决方案4】:

          这是直截了当的。您只需确保它们有一个共同的轴,然后您就可以将它们组合起来:

          将查找列放入索引

          df2.set_index(0, inplace=True)
          
              1
          0   
          a   10
          b   20
          c   30
          

          现在您可以很容易地将该列放入 df1:

          df1['multiplying_factor'] = df2[1]
          

          现在您只想将两列相乘:

          df1['final_value'] = df1.e*df1.multiplying_factor
          

          现在 df1 看起来像:

              d   e   multiplying_factor  final_value
          a   1   2   10                  20
          b   3   4   20                  80
          c   5   6   30                  180
          a   7   8   10                  80
          

          【讨论】:

            猜你喜欢
            • 2018-12-01
            • 2020-11-03
            • 1970-01-01
            • 2023-03-14
            • 1970-01-01
            • 2022-01-23
            • 1970-01-01
            • 1970-01-01
            • 2018-12-02
            相关资源
            最近更新 更多