Pandas: Prozente für jedes 'True'

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Benutzeravatar
Schwarzer Wolf
User
Beiträge: 56
Registriert: Donnerstag 5. Januar 2017, 05:24

Ich Grüße Euch :D

Habe mal wieder ein ähnliches Problem wie vor ein paar Tagen:

Wie schaffe ich es, mir die Prozente für jedes 'True' anzeigen zu lassen, anstatt nur das 'endergebnis'?

Also in folgendem Beispiel:
'100, 50, 66.6, 75'

Habe schon einiges probiert wie 'pct_change', 'diff' ...

Auf die 75 % komme ich so:

Code: Alles auswählen

df = pd.DataFrame()
df['punctual']= [True, False, True, True]
df.groupby('punctual').size() / len(df)
Wünsche Euch einen schönen Tag
Wer in der Wildnis lebt, muss zum Wolf werden, oder als Schaf sterben.
(Syrisches Sprichwort)
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@Schwarzer Wolf: nach cumsum hast Du doch schon im anderen Thread gefragt.
Benutzeravatar
Schwarzer Wolf
User
Beiträge: 56
Registriert: Donnerstag 5. Januar 2017, 05:24

Sirius3 hat geschrieben:@Schwarzer Wolf: nach cumsum hast Du doch schon im anderen Thread gefragt.
Mit 'cumsum' hab ich als Erstes probiert:

Code: Alles auswählen

df.groupby('punctual').cumsum() / range(1, len(df) +1)
Aber ich bekomme den folgenden Fehler:

Code: Alles auswählen

Traceback (most recent call last):
  File "/home/schwarzerwolf/anaconda3/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2847, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-11-c17ced6ed672>", line 1, in <module>
    df.groupby('punctual').cumsum() / range(1, len(df) +1)
  File "/home/schwarzerwolf/anaconda3/lib/python3.6/site-packages/pandas/core/groupby.py", line 1510, in cumsum
    return self._cython_transform('cumsum', **kwargs)
  File "/home/schwarzerwolf/anaconda3/lib/python3.6/site-packages/pandas/core/groupby.py", line 818, in _cython_transform
    raise DataError('No numeric types to aggregate')
pandas.core.base.DataError: No numeric types to aggregate
:K :K :K
Wer in der Wildnis lebt, muss zum Wolf werden, oder als Schaf sterben.
(Syrisches Sprichwort)
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

was meinst du denn mit "die Prozente für jedes 'True' anzeigen zu lassen"? Den Satz verstehe ich nicht.

Ein kleines Beispiel mit einem Ausgangsdatenframe und dem erwarteten Ergebnis. Im Eingangspost berechnest du ja einfach nur den Anteil der `True` an der Gesamtheit der Werte.

Das geht übrigens auch so:

[codebox=pycon file=Unbenannt.txt]>>> import pandas as pd
>>> df = pd.DataFrame()
>>> df['punctual']= [True, False, True, True]
>>> df['punctual'].count()
4
>>> df['punctual'].sum()
3[/code]

Gruß, noisefloor
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

der Aufruf lautet wohl auch eher:

[codebox=pycon file=Unbenannt.txt]>>> df['punctual'].cumsum()
0 1
1 1
2 2
3 3
Name: punctual, dtype: int32[/code]

Gruß, noisefloor
Benutzeravatar
Schwarzer Wolf
User
Beiträge: 56
Registriert: Donnerstag 5. Januar 2017, 05:24

noisefloor hat geschrieben:Hallo,

was meinst du denn mit "die Prozente für jedes 'True' anzeigen zu lassen"? Den Satz verstehe ich nicht.
Ich Grüße Dich noisefloor

Danke für deine Beispiele.

Ich möchte in einem 'Line Plot' mir anzeigen lassen, wie hoch die wahrscheinlich der Pünktlichkeit pro 'X' ist. Wie im Beispiel oben. Sodass beim Beispiel mit den 'True' der 'Plot' mit 100 beginnt. Da das zweite dann 'False' ist, geht die Wahrscheinlichkeit auf 50 zurück etc.
Wer in der Wildnis lebt, muss zum Wolf werden, oder als Schaf sterben.
(Syrisches Sprichwort)
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

axo. Würde ich so lösen:

[codebox=pycon file=Unbenannt.txt]>>> for total, count in enumerate(df['punctual'].cumsum()):
... print(count/(total+1))
...
1.0
0.5
0.666666666667
0.75
>>>[/code]

Gruß, noisefloor
Antworten