[PYTHON] Calculer la somme des valeurs uniques par tabulation croisée des pandas

Objectif

Je veux croiser les variables de valeur avec deux variables de catégorie dans les pandas et trouver la valeur unique totale des variables de valeur.

Le code suivant lorsqu'il est écrit en SQL

SELECT date,carrier,count(DISTINCT host) as cnt
FROM apachelog
GROUP BY date,carrier;

Image agrégée

Comptez la valeur unique de la variable hôte pour chaque date et variable de transporteur (3 catégories: Android, iOS, Autre)

date Android iOS Other
2015/04/01 5000 1300 15
2015/04/02 5200 1230 16
2015/04/03 5300 1100 17
... ... ... ...

Code en python3 (1) Utilisez la méthode pivot_table

Valeur moyenne de la colonne A pour chaque cellule du tableau croisé (colonne B x colonne C)

python


 pd.pivot_table(df,value='A',index='B',columns='C')

Nombre de colonnes A pour chaque cellule du tableau croisé (colonne B x colonne C)

python


 pd.pivot_table(df,value='A',index='B',columns='C',aggfunc = 'count')

Total de la colonne A pour chaque cellule du tableau croisé (colonne B x colonne C)

python


 pd.pivot_table(df,value='A',index='B',columns='C',aggfunc = 'sum')

Alors qu'en est-il du nombre de valeurs uniques dans la colonne A pour chaque cellule? Utilisez une expression lambda. Comment écrire une expression lambda est l'argument lambda 1, l'argument 2 ...: Traitement

pivot_unique.py


import pandas as pd

#Conservez les données dans la trame de données pandas
df = pd.DataFrame(apachlog)

#Dans la méthode suivante, la valeur inclura la valeur na.
#Trame de données à l'avance.info()Une main qui peut être utilisée quand on sait qu'il n'y a pas de na
pv = pd.pivot_table(df, values='host',index = 'date',columns = 'carrier',
 aggfunc = lambda x:len(x.unique()))

#La méthode suivante est la valeur à l'exclusion de la valeur na.
pv = pd.pivot_table(df, values='host',index = 'date',columns = 'carrier',
 aggfunc = lambda x:x.nunique())

(Bonus) Exporter vers un fichier

Les trames de données pandas peuvent être exportées au format tsv avec la méthode to_csv.

output.py


fout = 'output.tsv'
f = open(fout,'w',encoding = 'utf-8')

pv.to_csv(fout,sep = '\t')
f.close()

Code en python3 (2) Utiliser la méthode groupby

use_groupby.py


#Créez un groupe par objet en spécifiant l'axe des x et l'axe des y
grouped = df.groupby(['date','carrier'])

#Grouper par vers un bloc de données ne produit aucun résultat, il crée simplement un objet Group By pour le bloc de données avec la clé d'agrégation.

#Agréger avec la colonne "hôte" pour les objets groupés.
#La fonction à agréger est agg(Spécifiez ce contenu avec une expression lambda)
#compter que na est également inclus dans la valeur unique
grouped.host.agg(lambda x: len(x.unique()))

#Compte non compris na
grouped.host.agg(lambda x: x.nunique())

Le résultat agrégé de la méthode groupby est un tableau de «maintien vertical» (= type long).

date carrier
2015/04/01 Android 5000
2015/04/01 iOS 1300
2015/04/01 Other 15
2015/04/02 Android 5200
... ... ...

Si vous souhaitez étendre le "maintien vertical" (type long) au type croisé (?) (= Type large), utilisez la *** méthode de dépilage *** comme indiqué ci-dessous pour afficher l'image agrégée ci-dessus. Tu peux l'avoir.

#g = grouped.host.agg(lambda x: len(x.unique()))
g = grouped.host.agg(lambda x: x.nunique()))

g.unstack()

Environnement d'exécution

référence

Recommended Posts

Calculer la somme des valeurs uniques par tabulation croisée des pandas
Découvrez le jour par date / heure
Regroupez les valeurs VIP de Smash Bra avec les pandas
Calculez la valeur totale de plusieurs colonnes avec awk
Découvrez l'emplacement des packages installés avec pip
Le pouvoir des pandas: Python
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
Reformatez l'axe des temps du graphique de la série chronologique des pandas avec matplotlib
Trouvez l'écart moyen / standard des valeurs de luminosité dans l'image
Animez les valeurs alpha et bêta des principales valeurs boursières mondiales avec pandas + matplotlib
Trouvez la définition de la valeur de errno
Extraire la valeur maximale avec les pandas.
Trouvez la valeur optimale de la fonction à l'aide d'un algorithme génétique (partie 2)
Trouvez la fonction de transfert du système à un degré de liberté avec PythonControl.
Trouvez la distance d'édition (distance de Levenshtein) avec python
Comment trouver l'adresse mémoire de la valeur de la trame de données Pandas
Mettre en forme le fichier CSV de "Fête nationale" du Cabinet Office avec des pandas
Trouvez la solution numérique de l'équation différentielle ordinaire du second ordre avec scipy
J'ai écrit le fonctionnement de base de Pandas dans Jupyter Lab (partie 1)
Trouvez le plus petit index qui atteint le seuil de somme cumulée avec numpy
J'ai écrit le fonctionnement de base de Pandas dans Jupyter Lab (partie 2)
Trouvez la broche inertielle et le moment d'inertie principal à partir du tenseur inertiel avec NumPy
Retrouvez les termes généraux de la séquence de Tribonacci en algèbre linéaire et Python
J'ai fait une erreur en récupérant la hiérarchie avec MultiIndex of pandas
Trouvez l'aire de l'ensemble somme des rectangles qui se chevauchent
Tracez l'indice boursier moyen Nikkei avec des pandas
Alignez la taille de la barre de couleurs avec matplotlib
Obtenez les nièmes valeurs les plus importantes dans Pandas
Visualisez la valeur limite du perceptron multicouche
Vérifier l'existence du fichier avec python
Mesurer la force de l'association dans un tableau croisé
Trouvez la valeur SHA256 avec R (avec bonus)
Version Migemo de la commande: find ,: mfind
La troisième nuit de la boucle avec pour
Pandas du débutant, par le débutant, pour le débutant [Python]
Astuces: Comparaison de la taille de trois valeurs
Remplacez les noms / valeurs des colonnes par pandas dataframe
La deuxième nuit de la boucle avec pour
Calcul en temps réel de la valeur moyenne avec corroutine
Trouvez le coefficient du polypole le moins carré
Exemple de traitement efficace des données avec PANDAS
Compter le nombre de caractères avec écho
Remplissez la valeur manquante (null) de DataFrame avec les valeurs avant et après avec pyspark
Trouvez l'index des éléments qui correspondent aux conditions dans la trame / série de données pandas
Comparez la somme de chaque élément dans deux listes avec la valeur spécifiée en Python
J'ai comparé la moyenne mobile du type de filtre IIR avec les pandas et scipy
Conversion de type de plusieurs colonnes de pandas DataFrame avec un type en même temps
Notez que le calcul de la corrélation moyenne par paire était très facile avec les pandas
J'ai essayé la fonction de tableau croisé dynamique des pandas
L'histoire de l'apprentissage profond avec TPU
Comment trouver la zone du diagramme de Boronoi
Remarque: préparez l'environnement de CmdStanPy avec docker
Préparer l'environnement d'exécution de Python3 avec Docker
Trouver la main de "Millijan" par l'optimisation des combinaisons
Trouvez le différentiel du second ordre avec la différenciation automatique JAX
Fonctionnement automatique de Chrome avec Python + Sélénium + pandas
Mathématiques Todai 2016 résolues avec Python
Trouvez la valeur de l'humeur avec python (Rike Koi)
[Note] Exportez le html du site avec python.