Python 使用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']),但它需要定义行数。谢谢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']),但它需要定义行数。谢
我相信您需要创建索引,按、
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