当行和列中多个索引的顶层(Country 1和Country2)相同时,我需要从求和中排除单元格

import pandas as pd
label_columns1 = ['Country1','Country2']
label_columns2 = ['agri1', 'agri2']
label_rows1 = ['Country1','Country2']
label_rows2 = ['agri1', 'agri2']

DF = pd.DataFrame([[1,2,3,4]], index=pd.MultiIndex.from_product([label_rows1,label_rows2]), 
                     columns=pd.MultiIndex.from_product([label_columns1, label_columns2 ]))
DF
                     Country1     Country2
                   agri1  agri2   agri1  agri2  
Country1    agri1   1      2      3       4
            agri2   1      2      3       4
Country2    agri1   1      2      3       4
            agri2   1      2      3       4

我知道这将使我得到行式总和和一个新的列

DF[('Total',"Vlaue")] = DF.sum(axis=1)

DF

                     Country1     Country2  Total
                   agri1  agri2   agri1  agri2 Value    
Country1    agri1   1      2      3       4     10
            agri2   1      2      3       4     10
Country2    agri1   1      2      3       4     10
            agri2   1      2      3       4     10

我真正想要的并且一直在努力try 的是,只有在列和行索引不同的情况下才添加单元格.例如,在这种情况下,第一行将是7.我的数据框很大,行和列太多. 我到目前为止所try 的

for col in DF.columns:
    for row in DF.index:
        if col != row:
            DF[('Total',"Vlaue")] = DF.sum(axis=1)

这给了我意想不到的结果,但我想我接近了 我的预期结果应该如下所示

                     Country1     Country2      Total
                   agri1  agri2   agri1  agri2  Value   
Country1    agri1   1      2      3       4     (3+4) = 7
            agri2   1      2      3       4     (3+4) = 7
Country2    agri1   1      2      3       4     (1+2) = 3
            agri2   1      2      3       4     (1+2) = 3

推荐答案

屏蔽INDEX与列标签相同的值,然后沿axis=1计算总和

ix = df.index.get_level_values(0)
cx = df.columns.get_level_values(0)

m = ix.values[:, None] == cx.values
df[('Total', 'Value')] = df.mask(m).sum(axis=1)

               Country1       Country2       Total
                  agri1 agri2    agri1 agri2 Value
Country1 agri1        1     2        3     4   7.0
         agri2        1     2        3     4   7.0
Country2 agri1        1     2        3     4   3.0
         agri2        1     2        3     4   3.0

Python-3.x相关问答推荐

math. gcd背后的算法是什么,为什么它是更快的欧几里得算法?

我在创建Pandas DataFrame时感到困惑

将数据帧扩展为矩阵索引

Django将任何查询显示为html表格

我不能使用拆分来分隔数据

为什么我无法在django中按月筛选事件?

以某种方式分割字符串

Select 作为 MultiIndex 一部分的两个 DatetimeIndex 之间的行

Python Regex 查找给定字符串是否遵循交替元音、辅音或辅音、元音的连续模式

使用 selenium 加速网页抓取

找到操作系统的图片文件夹的 CLI

RGB 图像中最主要的 colored颜色 - OpenCV / NumPy / Python

TimescaleDB:是否可以从 Python 调用create_hypertable?

ValueError:找不到子字符串,我做错了什么?

创建一个可旋转的 3D 地球

发送Electron邮件时的 MIMEText UTF-8 编码问题

判断 dict.items() 中的成员资格的时间复杂度是多少?

如何使用 d.items() 更改 for 循环中的所有字典键?

是否可以在每个路由的基础上限制 Flask POST 数据大小?

使用 python 3.0 的 Numpy