Python 使用groupby对对角线值求和

Python 使用groupby对对角线值求和,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我想将每年的对角线值和剩余值相加,按对象分组。例如,对象a将为1+10+11+12+13。有没有办法不按对象拆分表?请注意,每个对象的行数可能不同。我试过: df.groupby(“公司”).apply(lambda x:x.reset_index().loc[0,'Year_0']+x.reset_index().loc[1,'Year_1']+x.reset_index().loc[2,'Year_2']+x.reset_index().loc[3,'Year_3']),但它需要定义行数。谢

我想将每年的对角线值和剩余值相加,按对象分组。例如,对象a将为1+10+11+12+13。有没有办法不按对象拆分表?请注意,每个对象的行数可能不同。我试过: df.groupby(“公司”).apply(lambda x:x.reset_index().loc[0,'Year_0']+x.reset_index().loc[1,'Year_1']+x.reset_index().loc[2,'Year_2']+x.reset_index().loc[3,'Year_3']),但它需要定义行数。谢谢


我相信您需要创建索引,按、
sum
行和最后一行将
Series
转换为
DataFrame

df1 = (df.drop_duplicates('Company', keep='last')
         .set_index('Company')
         .sum(axis=1)
         .reset_index(name='new'))
print (df1)
  Company   new
0       a  47.0
1       b  50.0
2       c  -9.0
或使用:

如果要使用对角线值,请使用:


最后一个值是
-8
,因为
-3+-1+-3+-1
或使用
groupby

print(df.groupby('Company',as_index=False).tail(1)
          .set_index('Company')
          .sum(axis=1)
          .reset_index(name='new'))
输出:

  Company   new
0       a  47.0
1       b  50.0
2       c  -9.0

使用
numpy
pandas-groupby

df.groupby('Company').apply(lambda x: np.sum(np.ma.diag(x.values)) + x.values[-1][-2])
输出

Company
a    47.0
b    50.0
c    -8.0
dtype: float64

尝试
groupby
company,然后是
trace
预期输出是什么?
  Company   new
0       a  47.0
1       b  50.0
2       c  -9.0
df.groupby('Company').apply(lambda x: np.sum(np.ma.diag(x.values)) + x.values[-1][-2])
Company
a    47.0
b    50.0
c    -8.0
dtype: float64