【问题标题】:Multiply different sized dataframes after comparing values of first columns比较第一列的值后乘以不同大小的数据帧
【发布时间】:2021-09-09 22:42:00
【问题描述】:

我对使用 DataFrames 很陌生,所以请多多包涵。所以我有两个不同大小的数据框,如下所示:

df1 =
        name  var1  var2  var3
    0   0001  1.08  0.89  1.98  
    1   0002  2.11  0.19  1.64
    2   0003  1.45  1.22  1.21
    3   0004  1.32  1.34  2.01  

df2 =
        name  var1  var2  var3
    0   0002   10    25    12  
    1   0001   21    31    12
    2   0002   25    14    24  
    3   0004   13    21    11
    4   0003   24    55    41
    5   0004   26    14    61
    6   0001   16    19    36
    7   0003   20    18    44

我要做的是比较第一列以匹配名称并将相应行的 var1、var2 和 var3 的列相互相乘,因此它会产生与 df2 长度相同的数据帧:

df3 = 
        name     var1   var2     var3
    0   0002   2.11*10 0.19*25  1.64*12  
    1   0001   1.08*21 0.89*31  1.98*12
    2   0002      .       .       .
    3   0004      .       .       .
    4   0003      .       .       .
    5   0004      .       .       .
    6   0001      .       .       .
    7   0003      .       .       .

我尝试像这样比较第一列:

variables = ['var1', 'var2', 'var3']
for var in variables:
   if (df1['name'] == df2['name']:
      print(df1[var] * df2[var])

但这给了我一个

ValueError: 只能比较标签相同的 Series 对象

有什么方法可以得到我想要的结果吗?

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    你必须使用“名称”作为索引来对齐数据框,然后一个简单的乘法就可以了。

    棘手的部分是跟踪原始索引。为此,您可以将其设置为列并为 df1 使用由 1 组成的虚拟索引,这样乘法就不会影响它:

    (df2.reset_index()
        .set_index('name')
        .mul(df1.set_index('name').assign(index=1))
        .reset_index()
        .set_index('index')
        .sort_index()
    )
    

    输出:

           name   var1   var2    var3
    index                            
    0         2  21.10   4.75   19.68
    1         1  22.68  27.59   23.76
    2         2  52.75   2.66   39.36
    3         4  17.16  28.14   22.11
    4         3  34.80  67.10   49.61
    5         4  34.32  18.76  122.61
    6         1  17.28  16.91   71.28
    7         3  29.00  21.96   53.24
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-12
      • 2022-11-20
      • 2021-03-31
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多