Pandas Gruppierung – Werte als Prozentsatz der gruppierten Summen auf der Grundlage einer anderen Spalte

Diese Frage ist eine Erweiterung einer Frage, die ich gestern gefragt habe, aber ich werde umformulieren

Mit einem Datenrahmen und Pandas, versuche ich herauszufinden, was der Spitzenprozentsatz für jede Kategorie in einer Gruppe ist.

Also, mit der Tipps-Datenbank, ich möchte sehen, für jeden Sex / Raucher, was der Tip Prozentsatz ist für weibliche Raucher / alle weiblichen und für weibliche Nichtraucher / alle weiblichen (und die gleiche Sache für Männer)

Wenn ich das mache,

import pandas as pd df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata-book/master/ch08/tips.csv", sep=',') df.groupby(['sex', 'smoker'])[['total_bill','tip']].sum() 

Ich bekomme folgendes:

  total_bill tip sex smoker Female No 977.68 149.77 Yes 593.27 96.74 Male No 1919.75 302.00 Yes 1337.07 183.07 

Aber ich suche etwas mehr

  Tip Pct Female No 0.153189183 Yes 0.163062349 Male No 0.15731215 Yes 0.136918785 

Wo Tipp Pct = Summe (Tip) / Summe (total_bill) für jede Gruppe

Was mache ich falsch und wie kann ich das beheben? Vielen Dank!

Ich verstehe, dass dies mir Tipp als Prozentsatz der Gesamtspiele geben würde:

 (df.groupby(['sex', 'smoker'])['tip'].sum().groupby(level = 0).transform(lambda x: x/x.sum())) 

Gibt es eine Möglichkeit, es zu ändern, um eine andere Spalte zu betrachten, dh

 (df.groupby(['sex', 'smoker'])['tip'].sum().groupby(level = 0).transform(lambda x: x/x['total_bill'].sum())) 

Vielen Dank!

One Solution collect form web for “Pandas Gruppierung – Werte als Prozentsatz der gruppierten Summen auf der Grundlage einer anderen Spalte”

Sie können die apply auf Loop durch Zeilen des total_bill (mit axis = 1 ) verwenden, wobei für jede Zeile Sie auf die tip und total_bill und sie teilen können, um den Prozentsatz zu erhalten:

 (df.groupby(['sex', 'smoker'])[['total_bill','tip']].sum() .apply(lambda r: r.tip/r.total_bill, axis = 1)) #sex smoker #Female No 0.153189 # Yes 0.163062 #Male No 0.157312 # Yes 0.136919 #dtype: float64 
  • Pandas, Name der Spalte nach einer Gruppe nach Funktion
  • Pandas Kategorie Untergruppe 0 zählt
  • Es können keine Methoden für Zeitstempel mit Hilfe von Series-Einbauten angewendet werden
  • Gruppenwerte, die np.nan in Intervallen anlaufen
  • Python-Pandas: Wie man mehrere univariate Regression nach Gruppe durchführt
  • Überlauffehler mit Pandas read_stata
  • Wie man gute reproduzierbare Pandas Beispiele macht
  • Pandas umwandeln 'NA' zu NaN
  • "Muss explizit den Motor einstellen, wenn er nicht Puffer oder Pfad für Io" in Panda passiert
  • Stoppwörter aus Dataframe entfernen
  • Pandas: Spaltenwerte im Dataframe ersetzen
  • Python ist die beste Programmiersprache der Welt.