I have dataframe which looks as given below :-
Dataframe:
Coll1 Coll2 Coll3 Coll4 Coll5 Coll6 Coll7 Coll8
measure1 0.037966678 -0.135118575 -0.073656574 0.022888691 -0.571120494 -0.840920088 -0.042983197 -0.348949555
measure2 0.354188199 0.234036602 0.271199485 0.266918765 -0.18683292 0.031608422 0.206748811 0.12081408
measure3 0.037966427 -0.125931101 -0.073643686 0.022880467 -0.571035929 -0.840920088 -0.040196244 -0.31358209
measure4 6.62 0.07295635 0.000175013 0.00035944 0.00014809 0 0.069333663 0.112785347
measure5 0.354190545 0.251111058 0.271246949 0.267014706 -0.186860588 0.031608422 0.221083464 0.134440137
measure6 0.076594642 0.077704374 0.09952279 0.059278591 0.078890611 0.150241631 0.061460853 0.030369465
measure7 0.184133007 0.248415482 0.186416923 0.129443923 0.201084178 0.657964902 0.139587378 0.182577533
Description of Dataframe:-
- First coll is Index of dataframe
Expected Output from this dataframe is as given below:-
Logic behind calculation is given below:-
- We have a Dictionary which will corelate Groups against Columns as given below
FLOW_GROUPS = {
"Group1": [
"Coll1",
"Coll2",
"Coll3",
],
"Group2": [
"Coll4",
"Coll5",
],
"Group3": [
"Coll6",
"Coll7",
"Coll8",
]
}
- Calculation1: for measure1, measure2, measure4, measure5, measure6 & measure7 we need to do Aggregate(SUM)
- Calculation2: for measure3 we need to calculate Aggregate(MEAN)
Solution: Implemented is given below :-
- Step1: Convert Index to a column:
df_by_fulfillment_flow['index1'] = df_by_fulfillment_flow.index
Then Applying logic to get desired output:-
[pd.Series(df_by_fulfillment_flow[v].mean(axis=1), name=k) if df_by_fulfillment_flow['index1'] == 'measure3' else pd.Series(df_by_fulfillment_flow[v].sum(axis=1), name=k) for k, v in FLOW_GROUPS.items()]
Problem statement : But above code is failing with following error
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Actual problem comes here df_by_fulfillment_flow['index1'] == 'measure3'
Any input how to address this issue.