我有一个格式的数据帧
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 1
、Factor 2
和Factor 3
的值求和。例如,我称之为标签的是ECON
,它聚合了ECON1
、ECON2
和ECON3
。类似地,FOOD
是另一个标签,包含FOOD1
、FOOD2
和FOOD3
。
我想创建一个字符串数组,格式如下:
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)