Mon pandas géants dataframe est comme suit:Pandas tableau croisé dynamique avec aggfunc conditionnelle
df = pd.DataFrame({"PAR NAME":['abc','def','def','def','abc'], "value":[1,2,3,4,5],"DESTCD":['E','N','E','E','S']})
J'ai besoin de pivoter df pour NOM PAR et savoir quel âge% de sa valeur provient des endroits où DESTCD est « E ». Quelque chose comme ça (qui, évidemment, de travail na pas!)
df.pivot_table(index="PAR NAME",values=["value"],aggfunc={'value':lambda x: (x.sum() if x["DESTCD"]=="E")*100.0/x.sum()})
Je suis actuellement ce en ajoutant une colonne conditionnelle, puis en additionnant le long de la « valeur » dans pivot, puis en divisant, mais ma base de données est énorme (1Go +) et il doit y avoir un moyen plus facile.
Edit: Résultat attendu abc 16,67 (depuis abc et E est de 1 sur abc totale qui est 6) def 77,78 (depuis def et E est 7 sur def total de 9);
(Note: S'il vous plaît ne recommande pas de trancher dataframes multiples comme mentionné mes données est énorme et l'efficacité est essentiel :))
Pouvez-vous ajouter la sortie attendue – Dark