J'ai mes données dans la trame de données pandas comme suit:
df1 = pd.DataFrame({'A':['yes','yes','yes','yes','no','no','yes','yes','yes','no'],
'B':['yes','no','no','no','yes','yes','no','yes','yes','no']})
Donc, mes données ressemblent à ceci
----------------------------
index A B
0 yes yes
1 yes no
2 yes no
3 yes no
4 no yes
5 no yes
6 yes no
7 yes yes
8 yes yes
9 no no
-----------------------------
Je voudrais le transformer en un autre bloc de données. La sortie attendue peut être affichée dans le script python suivant:
output = pd.DataFrame({'A':['no','no','yes','yes'],'B':['no','yes','no','yes'],'count':[1,2,4,3]})
Donc, ma sortie attendue ressemble à ceci
--------------------------------------------
index A B count
--------------------------------------------
0 no no 1
1 no yes 2
2 yes no 4
3 yes yes 3
--------------------------------------------
En fait, je peux réussir à trouver toutes les combinaisons et à les compter en utilisant la commande suivante: mytable = df1.groupby(['A','B']).size()
Cependant, il s'avère que ces combinaisons se trouvent dans une seule colonne. Je voudrais séparer chaque valeur d'une combinaison dans une colonne différente et ajouter également une colonne supplémentaire pour le résultat du comptage. Est-il possible de faire ça? Puis-je avoir vos suggestions? Merci d'avance.
set_index()
. Continué à essayer d'utilisergroupby()
pour regrouper des lignes avec une paire de colonnes commune particulière. Incroyable, merci!Mettre la très belle réponse de @ EdChum dans une fonction
count_unique_index
. La méthode unique ne fonctionne que sur les séries pandas, pas sur les trames de données. La fonction ci-dessous reproduit le comportement de la fonction unique dans R:Et ajoute un décompte des occurrences comme demandé par l'OP.
la source
Je n'ai pas fait de test de temps avec ça mais c'était amusant d'essayer. En gros, convertissez deux colonnes en une colonne de tuples. Maintenant, convertissez cela en dataframe, faites 'value_counts ()' qui trouve les éléments uniques et les compte. Jouez à nouveau avec zip et mettez les colonnes dans l'ordre que vous voulez. Vous pouvez probablement rendre les étapes plus élégantes mais travailler avec des tuples me semble plus naturel pour ce problème
la source