【问题标题】:How to sum total that refer to other dataframe如何汇总引用其他数据框的总数
【发布时间】:2018-11-29 07:49:27
【问题描述】:

我想总结两个 DataFrame 的所有组合,

DataFrame A

         ColA    ColB   Sales
           1       A      10
           1       B      20
           1       C      100
           2       D      1000
           2       E      2000

DataFrame B
         ColA    ColB   
          1      A,B
          2      E

我对 DataFrame 的期望结果是

        ColA     ColB   TotalSales
         1       A,B     30
         2       E       2000

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    您可以尝试选择dataframe B ColB列中的dataframe A行并添加selected的sales列

    #df
     ColA    ColB   Sales
       1       A      10
       1       B      20
       1       C      100
       2       D      1000
       2       E      2000
    
    
    df.set_index('ColB',inplace=True)
    #df
    #       ColA    Sales
    # ColB      
    # A        1    10
    # B        1    20
    # C        1    100
    # D        2    1000
    # E        2    2000
    
    #df1
    
     #ColA    ColB   
     # 1      A,B
     # 2      E
    
    df1['TotalSales'] = df1.ColB.str.split(',').apply(lambda x: df.loc[x]['Sales'].sum() )
    

    输出:

    ColA    ColB    TotalSales
    0   1   A,B 30
    1   2   E   2000
    

    【讨论】:

    • 感谢您的帮助 Naga,我尝试了您的代码,但出现“无法进行标签索引”错误。你知道如何解决它吗?谢谢
    • 我再次检查了它,对于那些数据帧 A 和 B,它工作正常,在哪一行你得到错误 @foy
    • 它说我有错误“使用 的这些索引器 [nan] 但我检查了它们并且它们不为空
    • 该错误出现在哪一行,您能否在问题中提供 json 或字典形式的数据@foy
    • 我的错,我有特殊字符,所以它不能运行。但现在我遇到了另一个错误,显示“Keyerror:[['A','B']] 中的非 [index]
    【解决方案2】:

    您可以将pd.DataFrame.apply 用于部分矢量化解决方案:

    def summer(x):
        m1 = df_a['ColA'].eq(x['ColA'])
        m2 = df_a['ColB'].isin(x['ColB'].split(','))
        return df_a.loc[m1 & m2, 'Sales'].sum()
    
    df_b['TotalSales'] = df_b.apply(summer, axis=1)
    
    print(df_b)
    
       ColA ColB  TotalSales
    0     1  A,B          30
    1     2    E        2000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 1970-01-01
      • 2019-08-18
      • 2018-07-23
      • 1970-01-01
      • 2018-04-23
      • 2016-10-12
      相关资源
      最近更新 更多