在行标签上对数据帧中的值求和



我有一个格式的数据帧

index    FACTOR1     FACTOR2    FACTOR3
0   ECON1   -0.068475   -0.000000   -0.000000
1   ECON2   0.000000    0.056963    0.000000
2   ECON2   0.000000    0.000000    0.041488
3   FOOD1   0.018582    0.000000    0.000000
4   FOOD2   -0.000000   -0.000000   -0.044363
5   FOOD3   -0.000000   -0.057993   -0.000000
6   ENV1    -0.045415   -0.000000   -0.000000
7   ENV2    0.000000    0.000000    0.044539
8   HEA1    -0.000000   -0.069631   -0.000000
9   HEA2    -0.000000   -0.000000   -0.026604
10  HEA3    0.028243    0.000000    0.000000
11  PERS1   0.000000    0.000000    0.085750
12  PERS2   0.000000    0.017831    0.000000
13  PERS3   0.069533    0.000000    0.000000
14  COM1    -0.025689   -0.000000   -0.000000
15  COM2    -0.029949   -0.000000   -0.000000
16  POL1    -0.000000   -0.061723   -0.000000
17  POL2    0.059108    0.000000    0.000000

我的目标是对每一行标签上的列Factor 1Factor 2Factor 3的值求和。例如,我称之为标签的是ECON,它聚合了ECON1ECON2ECON3。类似地,FOOD是另一个标签,包含FOOD1FOOD2FOOD3

我想创建一个字符串数组,格式如下:

labels=['ECON', 'FOOD', 'ENV', 'HEA', 'PERS', 'COM', 'POL']并在所有对应的labels上循环、压平它们的值并求和。逻辑如下:

summation=[]
for i in range(labels):
summation[i,:]=np.sum(xxxx)

然而,我不知道如何在循环中处理它,因为在每个标签上我都有一个值矩阵。

非常感谢任何帮助

IIUC您可以extract组名和sum:

print (df.assign(group=df["index"].str.extract("([A-Z]+)"))
.groupby("group").sum())

或者使用您的标签列表:

labels=['ECON', 'FOOD', 'ENV', 'HEA', 'PERS', 'COM', 'POL']
print (df.assign(group=df["index"].str.extract(f"({'|'.join(labels)})"))
.groupby("group").sum())

结果:

FACTOR1   FACTOR2   FACTOR3
group                              
COM   -0.055638  0.000000  0.000000
ECON  -0.068475  0.056963  0.041488
ENV   -0.045415  0.000000  0.044539
FOOD   0.018582 -0.057993 -0.044363
HEA    0.028243 -0.069631 -0.026604
PERS   0.069533  0.017831  0.085750
POL    0.059108 -0.061723  0.000000

以下是一个建议的答案,它完成了Henry 的上一个答案

labels=['ECON', 'FOOD', 'ENV', 'HEA', 'PERS', 'COM', 'POL']
AugmentedMatrix=ReadyMatrix.assign(group=ReadyMatrix["index"].str.extract(f"({'|'.join(labels)})"))             
summation=np.zeros(( len(labels) , 1 ))
for i in range(len(labels)):
print(labels[i])                               
temp=AugmentedMatrix.loc[AugmentedMatrix['group']==labels[i], ['FACTOR1', 'FACTOR2', 'FACTOR3']].values
summation[i]=np.sum(temp) 
print(summation)

相关内容

  • 没有找到相关文章

最新更新