Le comte de valeurs uniques à l'aide de pandas groupby
J'ai des données de la forme suivante:
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
Les valeurs Non null dans les groupes sont toujours les mêmes. Je veux compter le non-valeur null pour chaque groupe (lorsqu'il existe) une fois, et ensuite trouver le nombre total de comptes pour chaque valeur.
Je suis actuellement en train de faire cela dans la suite (maladroit et inefficace):
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
Je suis sûr qu'il y a une manière de le faire plus proprement et sans l'aide d'une boucle, mais je n'arrive pas à s'en sortir. Toute aide serait grandement appréciée.
OriginalL'auteur user1684046 | 2017-01-01
Vous devez vous connecter pour publier un commentaire.
Je pense que vous pouvez utiliser
SeriesGroupBy.nunique
:Une autre solution avec
unique
, puis de créer de nouveauxdf
parDataFrame.from_records
, remodeler àSeries
parpile
et derniervalue_counts
:df = pd.DataFrame({ 'group': [1, 1, 2, 3, 3, 3, 4], 'param': ['a', 'c', 'b', np.nan, 'c', 'a', np.nan] })
, mais votre code de retour différent de sortie parce que l'utilisation seule d'abord unique élément de la liste dans chaquegroup
. Mon code de retour de toutes les valeurs uniques. S'il vous plaît vérifier si je comprends bien ce que vous avez besoin. Je vous remercie.Votre code ne ce dont j'ai besoin - merci pour votre aide! Je prend le premier élément juste pour
.unique()
ne pas retourner un tableau.Comment obtenir les noms de colonne
ajouter
.reset_index()
Thankyou.@jezrael.
OriginalL'auteur jezrael
C'est juste un add-on à la solution dans le cas où vous voulez calculer non seulement les valeurs uniques, mais d'autres fonctions d'agrégation:
Espère que vous la trouverez utile
OriginalL'auteur datapug