【问题标题】:suming two dataframes pandas python对两个数据框pandas python求和
【发布时间】:2017-10-10 15:06:46
【问题描述】:

我有两个数据框

         colA    colB   amount1    amount2     key  
maindf = xx      yy     12         1           55_ab
         qs      rr     13         2           14_rs

        colA    colB   amount1     amount2     key           
df =    dd      tt     10          5           55_ab

我想根据字段键将数据帧df的字段amount1和amount 2的值添加到maindf以获得以下内容

         colA    colB   amount1    amount2     key  
maindf = xx      yy     22         6           55_ab
         qs      rr     13         2           14_rs

【问题讨论】:

    标签: python dataframe


    【解决方案1】:

    如何使用 pandas - 合并 df 并创建新的列/列,如下所述(只需将两列相加) join - left = maindf, right = df, how = 'left', left_on='key', right_on = 'key'

    import pandas as pd
    df = pd.DataFrame({'$a':[1,2], '$b': [10,20]}) # creating fake df
    df2 = pd.DataFrame({'$a':[1,2], '$b': [10,20]}
    
    dfMerge = pd.merge(left=df, right=df2, how='left', left_on='$a', right_on='$a')
    dfMerge["SUM"] = dfMergeTemp["$b_x"] + dfMergeTemp["$b_y"]
    
    # print(dfMergeTemp)
    

    在你的情况下(也许重命名你的列是有意义的,以免混淆正在发生的事情)

    mergedDf = pd.merge(left = maindf, right = df, how = 'left', left_on='key', right_on = 'key')
    

    【讨论】:

    • 我不想要额外的专栏。
    • 第二个数据框的值是否直接与主数据框的值相加?
    • 您可以删除任何其他列或只选择您感兴趣的列。所以结果会如你所愿,但仍然很简单。
    【解决方案2】:

    这个呢?

    # make main df
    main = pd.DataFrame({'ColA' : ['xx', 'qs'],
                         'ColB' : ['yy', 'rr'],
                         'amount1' : [12, 13],
                         'amount2' : [1, 2],
                         'key' : ['55_ab', '14_rs']})
    
    # make other df
    df = pd.DataFrame({'ColA' : ['dd'],
                       'ColB' : ['tt'],
                       'amount1' : [10],
                       'amount2' : [5],
                       'key' : ['55_ab']})
    
    # merge dataframes
    df1 = main.merge(df,
                     how = 'left',
                     left_on = 'key',
                     right_on = 'key').fillna(0)
    
    # sum amount1
    df1.insert(df1.shape[1],
               'amount1',
               df1.amount1_x + df1.amount1_y)
    
    # sum amount2
    df1.insert(df1.shape[1],
               'amount2',
               df1.amount2_x + df1.amount2_y)
    
    # drop unneeded columns
    df1.drop(['amount1_x',
              'amount2_x',
              'ColA_y',
              'ColB_y',
              'amount1_y',
              'amount2_y'],
             axis = 1,
             inplace = True)
    

    【讨论】:

    • 有没有更简单的,事实上我的数据框看起来更像
    • 它更大,有 20 列,一些字段的组合名称为 'pnb 2016'
    • 请提供您实际数据框的示例(尺寸和所有)。如果您不提供正确的示例数据,则无法为您提供答案。
    【解决方案3】:
    Pôle        Libellé entité          PNB N-1         PNB N initial       Key
    IBFS        PJSC ROSBANK            -200            0                   zz_t55
    IBFS        PJSC ROSBANK            0               1500                bb_y44  
    IBFS        PJSC ROSBANK            1000            2000                az_89   
    IBFS        PJSC ROSBANK            5000            -250                rr_14
    

    所以这是 maindf 可以说有更多的列,我不能发布所有内容。 所以我想总结另一个数据帧中的值,这些数据帧与“PNB N-1”和“PNB N initial”字段具有相同的键

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 2020-05-20
      • 1970-01-01
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多