Zählen eindeutiger Werte mithilfe von pandas groupby
Ich habe Daten in der folgenden form:
df = pd.DataFrame({
'group': [1, 1, 2, 3, 3, 3, 4],
'param': ['a', 'a', 'b', np.nan, 'a', 'a', np.nan]
})
print(df)
# group param
# 0 1 a
# 1 1 a
# 2 2 b
# 3 3 NaN
# 4 3 a
# 5 3 a
# 6 4 NaN
Nicht-null-Werte innerhalb der Gruppen sind immer die gleichen. Ich möchte die Anzahl der nicht-null-Wert für jede Gruppe (sofern vorhanden) einmal, und dann finden die gesamtaktivität für jeden Wert.
Ich bin derzeit dabei diese in den folgenden (klobig und ineffizient) Weg:
param = []
for _, group in df[df.param.notnull()].groupby('group'):
param.append(group.param.unique()[0])
print(pd.DataFrame({'param': param}).param.value_counts())
# a 2
# b 1
Ich bin sicher, es gibt eine Möglichkeit, dies zu tun mehr sauber und ohne Verwendung einer Schleife, aber ich kann einfach nicht scheinen, um es herauszufinden. Jede Hilfe wäre sehr geschätzt werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dass Sie verwenden können,
SeriesGroupBy.nunique
:Andere Lösung mit
einzigartige
, dann erstellen Sie neuedf
durchDataFrame.from_records
, umzugestalten, zuSeries
durchstack
und letztenvalue_counts
:df = pd.DataFrame({ 'group': [1, 1, 2, 3, 3, 3, 4], 'param': ['a', 'c', 'b', np.nan, 'c', 'a', np.nan] })
, aber dein code zurück, andere Ausgabe, da für die Nutzung nur die ersten eindeutigen element der Liste in jedergroup
. Mein code wieder alle eindeutigen Werte. Bitte aktivieren Sie es, wenn ich verstehe, was Sie brauchen. Danke..unique()
hat nicht ein array zurückgeben..reset_index()
Dies ist nur ein add-on, um die Lösung in Fall, dass Sie berechnen möchten nicht nur einzigartige Werte, aber andere Aggregatfunktionen:
Hoffe, Sie finden es nützlich