Bei der Datenanalyse mit Pythons Pandas ist die Groupby-Funktion eine praktische Funktion, die für jede Gruppe berechnet wird. Ich benutze oft df.groupby (df ['col1']) ['col2'] **. Mean () ** und **. Describe () ** Es ist eine orthodoxe Funktion wie Manchmal möchte ich jeden geteilten Datenrahmen verarbeiten, Ich habe festgestellt, dass das Kombinieren der Anweisung ** for ** und ** get_group ** bequem verarbeitet werden kann, daher werde ich es vorstellen.
groupby_get_group.py
import pandas as pd
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import numpy as np
iris_dataset = load_iris()
df_iris=pd.DataFrame(iris_dataset.data,columns=iris_dataset.feature_names)
#Zielspalte hinzufügen
df_iris.loc[:,'target']=iris_dataset.target
#Erstellen Sie ein Wörterbuch mit Produktnamen
iris_map=dict(zip([0,1,2],iris_dataset.target_names))
#Verbinden Sie DataFrame und Wörterbuch mit dem Ziel der Kartenfunktion_Spalte für Namen hinzufügen
df_iris.loc[:,'target_names']=df_iris['target'].map(iris_map)
sepal length (cm) | sepal width (cm) | petal length (cm) | petal width (cm) | target | target_names |
---|---|---|---|---|---|
5.1 | 3.5 | 1.4 | 0.2 | 0 | setosa |
4.9 | 3.0 | 1.4 | 0.2 | 0 | setosa |
- | - | - | - | - | - |
5.7 | 2.8 | 4.1 | 1.3 | 1 | versicolor |
- | - | - | - | - | - |
6.3 | 3.3 | 6.0 | 2.5 | 2 | virginica |
Teilen Sie den Datenrahmen (** df_iris ) nach Rasse ( 'Zielnamen' **). Der geteilte ist ** gp **.
groupby_get_group.py
gp = df_iris.groupby('target_names')
In[0]:type(gp)
Out[0]:pandas.core.groupby.generic.DataFrameGroupBy
In[1]:print(gp)
Out[1]:<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000028788A33708>
Mit groupby aufgeteilte Datensätze können nicht unverändert verwendet werden. Lassen Sie uns daher die Attribute usw. mit der for-Anweisung untersuchen.
In[2]:for d_gp in gp:
print(d_gp)
Out[2]:
147 6.5 3.0 ... 2 virginica
148 6.2 3.4 ... 2 virginica
149 5.9 3.0 ... 2 virginica
[50 rows x 6 columns])
In[3]:type(d_gp)
out[3]:tuple
Es scheint, dass der geteilte Datenrahmen als Variable vom Typ Tapple (** d_gp **) gespeichert ist. Um den Inhalt des Taples zu überprüfen, geben Sie hier Folgendes ein:
In[4]:d_gp[0]
Out[4]:'virginica'
In[5]:d_gp[1]
Out[5]:
sepal length (cm) sepal width (cm) ... target target_names
100 6.3 3.3 ... 2 virginica
101 5.8 2.7 ... 2 virginica
102 7.1 3.0 ... 2 virginica
103 6.3 2.9 ... 2 virginica
147 6.5 3.0 ... 2 virginica
148 6.2 3.4 ... 2 virginica
149 5.9 3.0 ... 2 virginica
[50 rows x 6 columns]
Der Status nach Ausführung der for-Anweisung ist, dass der Datenrahmen der dritten Ebene ** 'virginica' ** von ** "target_names" ** ** d_gp ** zugewiesen ist. Du kannst nachschauen.
Daher ist es in Ordnung, nur ** d_gp [1] ** zu iterieren, aber hier nutzen wir ** d_gp [0] ** und rufen einen bestimmten Datensatz mit der Funktion ** get_group ** ab. Ich werde es verarbeiten.
Die Anweisung ** for ** kann Tapples abrufen. Der erste Taple enthält die Ebene der Reihe (Sorten: Setosa, Versicolor, Virginica) multipliziert mit ** Gruppe mit **. Der zweite enthält jeden Datenrahmen.
** get_group ** verwendet die im ersten Teil dieses Taples gespeicherte Ebene als Variable und ruft den im zweiten Teil des Tapples gespeicherten Datenrahmen ab und verarbeitet ihn für jede Ebene.
Das Folgende ist ein Datenrahmen, der für jede Sorte setosa, versicolor, virginica unterteilt ist. Geben Sie den Typ an und extrahieren Sie den Datenrahmen Eine Darstellung von "Kelchblattlänge" und "Kelchblattbreite".
groupby_get_group.py
for d_gp in gp:
df_g=gp.get_group(d_gp[0])
##Schreiben Sie mit dem unten unterteilten Datenrahmen, was Sie verarbeiten möchten
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
X=df_g[df_g.columns[0]].values
y=df_g[df_g.columns[1]].values
ax.set_title(str.capitalize(d_gp[0])+" "+\
str.capitalize(df_g.columns[0])+\
' vs '+str.capitalize(df_g.columns[1]))
ax.scatter(X,y,marker='o',color='darkblue',edgecolor="")
cor=np.corrcoef(X, y)[0,1]
ax.set_xlabel(str.capitalize(df_g.columns[0]))
ax.set_ylabel(str.capitalize(df_g.columns[1]))
ax.text(0.99, 0.01,"correlation:{0:.2}".format(cor),
horizontalalignment='right', verticalalignment='bottom',
fontsize=12,color="blue",transform=ax.transAxes)
plt.show()
das ist alles.
Ich werde zum ersten Mal bei Qiita posten. Bei Qiita ging es darum, mir zu helfen, also hoffe ich, dass es jemandem hilft.
Grundlegende Codierung für Python-Datenanalyse / maschinelles Lernen! Einführung in die Nutzung der Pandas-Bibliothek (beeindrucken Sie das Top-Zahnrad) (Japanisch) Buch (Softcover) ISBN-10: 4295005657 ISBN-13: 978-4295005650
Recommended Posts