Ich beantrage qcut auf groupby Ergebnisse, eine vereinfachte Version meines Problems ist folgende:Fortsetzung von qcut für die nächste groupby-Gruppe, falls fehlgeschlagen?
a = pd.DataFrame({'A':[1,1,1,1,2,2,2,2],
'B': [0,0,0,0,2,3,7,6]})
a.groupby(['A'])['B'].apply(lambda x: pd.qcut(x, 2))
Das Problem ist, ein Teil der Gruppe wirft Valueerror weil
raise ValueError('Bin edges must be unique: %s' % repr(bins))
ValueError: Bin edges must be unique: array([ 0., 0., 0.])
Was ich erreichen möchte ist, Wenn qcut fehlschlägt, überspringe (oder übergebe 0 als Ergebnis) und führe die qcut für die nächste Gruppe fort. irgendwelche Vorschläge?
Schön! Ich werde meine Antwort verlassen, um die +1 zu speichern, aber das ist viel besser. – JohnE
nein Ihre Antwort ist auch gut, ich mag, wie Sie 'Join' so verwenden, um die Null-Werte zu füllen. vielleicht könntest du mit 'ser = ser.append (pd.qcut (g, 2))' (nur mein persönlicher Geschmack) ein wenig prägnanter sein, auch solltest du besser '.astype (str)' hinzufügen, sonst wird es nicht funktionieren mit mehr als einer nicht fehlerhaften Gruppe – maxymoo
Ja, guter Punkt, append ist sauberer. Aber 'qcut' scheint bereits einen String zurückzugeben, so dass ich nicht weiß, ob der'astype (str)' benötigt wird. Ich habe mit einigen Beispielen herumgespielt und konnte keinen Unterschied sehen. – JohnE