Panda Series MultiFrame zu Singleframe konvertieren

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
G-Rizzle
User
Beiträge: 90
Registriert: Donnerstag 18. Februar 2021, 12:26

Hi,

ich lasse mir die Häufigkeitsverteilung einer Abweichung bestimmen:

Code: Alles auswählen

verteilungen_abweichungen_von_hfgster_schrittweite = pd.DataFrame(abweichungen_von_hfgster_schrittweite).value_counts()
Die Ausgabe

Code: Alles auswählen

print("verteilung: ")
print(verteilungen_abweichungen_von_hfgster_schrittweite)
print("")
print("keys: ")
print(verteilungen_abweichungen_von_hfgster_schrittweite.keys())
sieht folgend aus:
Bild


Das Output von pd.value_counts() ist also eine Series, wobei die Keys Multiframes sind, der 2. Eintrag eines jeden Tuples aber leer ist; das ist schlecht für mich. Wie kann ich aus diesem MultiFrame effizient einen Singleframe, lediglich mit dem ersten Eintrag jeweils erstellen?

Habe einiges probiert, nichts war erfolgreich; momentane Schlamperlösung ist die Umformung in eine Liste und daraus mit List-Comprehension immer nur den 1. Eintrag zu wählen.

Wie geht es sauber?
Benutzeravatar
ThomasL
User
Beiträge: 1367
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Es gibt bestimmt mehrere (und bessere) Möglichkeiten.
Mir ist die hier eingefallen:

Code: Alles auswählen

import pandas as pd

data = [1,2,3,4,5,6,2,3,1,5,8,3,6,2,1,3,4,2,5,6,8,2,3,4,1,2,3]
counts = pd.DataFrame(data).value_counts()
keys = counts.keys()

def mapper(item):
    return item[0]

list(keys.map(mapper))
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
G-Rizzle
User
Beiträge: 90
Registriert: Donnerstag 18. Februar 2021, 12:26

ThomasL hat geschrieben: Sonntag 13. Februar 2022, 17:42 Es gibt bestimmt mehrere (und bessere) Möglichkeiten.
Mir ist die hier eingefallen:

Code: Alles auswählen

import pandas as pd

data = [1,2,3,4,5,6,2,3,1,5,8,3,6,2,1,3,4,2,5,6,8,2,3,4,1,2,3]
counts = pd.DataFrame(data).value_counts()
keys = counts.keys()

def mapper(item):
    return item[0]

list(keys.map(mapper))

danke dir! finde ich sehr gut
Benutzeravatar
__blackjack__
User
Beiträge: 13174
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Man könnte sich von dem `MultiIndex` auch einfach vom entsprechenden Level die Werte geben lassen:

Code: Alles auswählen

In [22]: counts
Out[22]: 
3    6
2    6
1    4
6    3
5    3
4    3
8    2
dtype: int64

In [23]: counts.index                                                           
Out[23]: 
MultiIndex([(3,),
            (2,),
            (1,),
            (6,),
            (5,),
            (4,),
            (8,)],
           )

In [24]: counts.index.get_level_values(0)                                       
Out[24]: Int64Index([3, 2, 1, 6, 5, 4, 8], dtype='int64', name=0)

In [25]: list(counts.index.get_level_values(0))                                 
Out[25]: [3, 2, 1, 6, 5, 4, 8]
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
G-Rizzle
User
Beiträge: 90
Registriert: Donnerstag 18. Februar 2021, 12:26

__blackjack__ hat geschrieben: Montag 14. Februar 2022, 13:28 Man könnte sich von dem `MultiIndex` auch einfach vom entsprechenden Level die Werte geben lassen:

Code: Alles auswählen

In [22]: counts
Out[22]: 
3    6
2    6
1    4
6    3
5    3
4    3
8    2
dtype: int64

In [23]: counts.index                                                           
Out[23]: 
MultiIndex([(3,),
            (2,),
            (1,),
            (6,),
            (5,),
            (4,),
            (8,)],
           )

In [24]: counts.index.get_level_values(0)                                       
Out[24]: Int64Index([3, 2, 1, 6, 5, 4, 8], dtype='int64', name=0)

In [25]: list(counts.index.get_level_values(0))                                 
Out[25]: [3, 2, 1, 6, 5, 4, 8]
so etwas habe ich bereits versucht, da bekomme ich allerdings nur die meldung
" AttributeError: 'MultiIndex' object has no attribute 'index' "
Benutzeravatar
__blackjack__
User
Beiträge: 13174
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@G-Rizzle: Das ist ja 1:1 aus einer Python-Sitzung raus kopiert, das funktioniert also. Du versuchst offenbar auf einem `MultiIndex` noch mal auf den Index zuzugreifen, den ein Index halt nicht hat, der ist ja schon der Index und hat keinen.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Antworten