Seite 1 von 1
Pandas: Prozente für jedes 'True'
Verfasst: Mittwoch 31. Mai 2017, 04:56
von Schwarzer Wolf
Ich Grüße Euch
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
Re: Pandas: Prozente für jedes 'True'
Verfasst: Mittwoch 31. Mai 2017, 06:54
von Sirius3
@Schwarzer Wolf: nach cumsum hast Du doch schon im anderen Thread gefragt.
Re: Pandas: Prozente für jedes 'True'
Verfasst: Mittwoch 31. Mai 2017, 07:04
von Schwarzer Wolf
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
Re: Pandas: Prozente für jedes 'True'
Verfasst: Mittwoch 31. Mai 2017, 07:05
von noisefloor
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
Re: Pandas: Prozente für jedes 'True'
Verfasst: Mittwoch 31. Mai 2017, 07:08
von noisefloor
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
Re: Pandas: Prozente für jedes 'True'
Verfasst: Mittwoch 31. Mai 2017, 07:19
von Schwarzer Wolf
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.
Re: Pandas: Prozente für jedes 'True'
Verfasst: Mittwoch 31. Mai 2017, 07:40
von noisefloor
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