【问题标题】:How do I add pandas dataframes according to multi-index? [duplicate]如何根据多索引添加熊猫数据框? [复制]
【发布时间】:2019-08-24 22:58:07
【问题描述】:

我有一个 pandas 数据框 A 如下:

A = pd.DataFrame({'v1' : [1,2,2],
         'v2':[2,3,4],
         'weight':[10,11,12]})
A.set_index(['v1','v2'])

B = pd.DataFrame({'v1' : [2,3,4],
         'v2' : [3,5,6],
         'weight':[20,21,22]})
B.set_index(['v1','v2'])

我想针对它们的多索引添加 A 和 B 以形成以下数据框:

我如何编码这个..?

提前谢谢你

【问题讨论】:

  • 请提供重新创建两个输入数据帧的代码
  • @anky_91 我编辑了这篇文章。由于我是这个网站的新手,我不熟悉这个网站提供的写作工具。请原谅我的帖子很乱。
  • 只做A.add(B, axis='index', fill_value=0)

标签: python pandas


【解决方案1】:

请注意,例如A.set_index(['v1','v2']) 只创建一个临时结果, 使用新的 MultiIndex,但将索引保留在原始 DataFrame 中 和以前一样。

所以我假设你执行了A.set_index(['v1','v2'], inplace=True)B DataFrame 也是如此。

要生成总和,请运行单个指令:

pd.concat([A,B]).groupby(level=[0,1]).sum()

编辑

如果您有两个具有“正常”索引的 DataFrame(就像您创建它们一样), 你也可以运行一条指令:

pd.concat([A,B]).groupby(['v1', 'v2']).sum()

【讨论】:

    【解决方案2】:

    加入AB

    A = pd.DataFrame({'v1' : [1,2,2],
             'v2':[2,3,4],
             'weight':[10,11,12]}).set_index(['v1', ' v2'])
    
    B = pd.DataFrame({'v1' : [2,3,4],
             'v2' : [3,5,6],
             'weight':[20,21,22]}).set_index(['v1', 'v2'])
    
    C = A.join(B, how='outer', lsuffix='_A', rsuffix='_B').fillna(0)
    C['weight'] = C['weight_A'] + C['weight_B']
    

    结果:

           weight_A  weight_B  weight
    v1 v2                            
    1  2       10.0       0.0    10.0
    2  3       11.0      20.0    31.0
       4       12.0       0.0    12.0
    3  5        0.0      21.0    21.0
    4  6        0.0      22.0    22.0
    

    如果需要,请删除 weight_Aweight_B

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 1970-01-01
      • 2021-11-30
      • 2018-07-28
      • 2015-10-22
      • 2013-12-27
      相关资源
      最近更新 更多