Python 3.x 多索引列的总和

Python 3.x 多索引列的总和,python-3.x,pandas,multi-index,Python 3.x,Pandas,Multi Index,如果我有一个带有嵌套标题的数据框,如下所示: John Joan Smith, Jones, Smith, Index1 234 432 324 Index2 2987 234 4354 …如何创建一个新列,对每行的值求和? 我尝试了df['sum']=df['John']+df['Joan'],但导致了以下错误: ValueError: Wrong number o

如果我有一个带有嵌套标题的数据框,如下所示:

              John          Joan
         Smith,   Jones,    Smith,
Index1     234      432      324
Index2     2987     234      4354
…如何创建一个新列,对每行的值求和? 我尝试了
df['sum']=df['John']+df['Joan']
,但导致了以下错误:

ValueError: Wrong number of items passed 3, placement implies 1

舞会,好久没你的消息了

您希望按分组,但指定标高和轴
axis=1
表示要对行而不是列求和
level=0
是列的顶行

df = pd.DataFrame({
    ('John', 'Smith,'): [234, 2987], 
    ('John', 'Jones,'): [432, 234], 
    ('Joan', 'Smith,'): [324, 4354]}, index=['Index1', 'Index2'])

>>> df.groupby(level=0, axis=1).sum()
        Joan  John
Index1   324   666
Index2  4354  3221

如果我理解正确:

…如何创建一个新列,对每行的值求和

解决方案 每行的总和为

df.sum(axis=1)
诀窍在于成为一个新专栏。您需要确保添加的列具有两级列标题

df.loc[:, ('sum', 'sum')] = df.sum(axis=1)
我对它不满意,但它很管用

         Joan   John          sum
       Smith, Jones, Smith,   sum
Index1    324    432    234   990
Index2   4354    234   2987  7575

谢谢你们两位。如果前面有一些列我不需要求和,我将如何创建新的求和列(如上所述)?例如,如果第一列是name,第二列是age,我如何忽略它们呢?我解决了我的后续问题:首先,将要求和的列集定义为如下变量:cols=df[['a','b']]。接下来,像这样使用该变量:df.loc[:,('sum','sum')]=cols.sum(axis=1)