3 回答
TA贡献1998条经验 获得超6个赞
用:
df1 = df.groupby(df.index)['value'].agg([lambda x: max(x,key=abs), 'mean'])
df1.columns = ['value', 'average']
print (df1)
value average
CDE -3.097715 -0.389547
CZR -3.270018 -3.163365
LPI -5.701044 -4.086021
LXU 4.818995 0.513976
OAS -3.336539 -3.336539
SWN -4.349304 -0.644670
TA贡献1828条经验 获得超3个赞
这是一个使用groupby+agg和两个函数的解决方案,一个通过绝对值计算最大值,另一个计算平均值:
def max_abs(x):
return x.iloc[x.abs().values.argmax()]
res = df.groupby(level=0).agg([max_abs, 'mean'])\
.xs('value', axis=1, drop_level=True)
print(res)
max_abs mean
CDE -3.097715 -0.389547
CZR -3.270018 -3.163365
LPI -5.701044 -4.086021
LXU 4.818995 0.513976
OAS -3.336539 -3.336539
SWN -4.349304 -0.644670
添加回答
举报