[PYTHON] [Pandas-Beschleunigung] Wenn Sie der Meinung sind, dass das Zusammenführen langsam ist, verwenden Sie die Karte

Zusammenführen ist langsam!

Fühlst du dich nicht? Besonders wenn es viele Linien im Wettbewerb gibt oder es sehr langsam ist. Wie viel Zeit verbringen Sie mit dem Erstellen von Funktionen! In einem solchen Fall wird die Verwendung der Karte schneller.

Beispiel

Wenn es keine Zeilennummer gibt, gibt es keinen Unterschied, also werde ich dieses Mal die Titanic von kaggle verwenden. Es gibt eine Spalte namens Alter, also möchte ich zählen, codieren.

merge_map.py


import pandas as pd
import time

df = pd.read_csv("train.csv")
df["Age"] = df["Age"].dtype("str")
t1 = time.time()

#pettern 1
df = pd.merge(df,df.Age.value_counts().reset_index().rename(columns = {"Age":"Age_count1"}),
                         left_on = "Age", right_on = "index", how = "left")
t2 = time.time()

#pettern 2
df["Age_count2"] = df["Age"].map(df.Age.value_counts())
t3  =time.time()

print(t2-t1)
print(t3-t2)
#output
0.004603147506713867                                                                                                                                                                                                                        
0.0012080669403076172

In diesem Fall ist die Karte viermal schneller. Sie können die Zielcodierung auch mit der Karte durchführen.

df = pd.merge(df, df.groupby("Age").Survived.mean().reset_index().rename(columns = 
                    {"Survived":"Age_target1"}), on = "Age", how = "left")
t4 = time.time()
df["Age_target2"] = df["Age"].map(df.groupby(["Age"]).Survived.mean())
print(t4-t3)
print(t5-t4)
#output
0.005101919174194336                                                                                                                                                                                                                        
0.001428842544555664

Dies ist auch etwa viermal schneller. Bei dieser Skala sind es noch 10 Sekunden oder 40 Sekunden. Es ist ganz anders, wenn Sie 1 Minute oder 4 Minuten verstehen.

Wenn Sie zwei Schlüssel haben

Karte muss einen Schlüssel haben. In diesem Fall machen Sie gewaltsam einen Schlüssel.

df = pd.merge(df, df.assign(sex_age_count = 0).groupby(
["Sex", "Age"])["sex_age_count"].count().reset_index(),on = ["Sex", "Age"] ,how = "left")

t6 = time.time()
#Machen Sie gewaltsam einen Schlüssel
df["Sex_Age"] = df["Sex"] + df["Age"]
t7 = time.time()
df["Sex_Age_count"] = df["Sex_Age"].map(df["Sex_Age"].value_counts())
t8 = time.time()

print(t6-t5)
print(t8-t7)

Dies ist auch etwa viermal schneller.

#output
0.006415843963623047                                                                                                                                                                                                                        
0.0015180110931396484    

Recommended Posts

[Pandas-Beschleunigung] Wenn Sie der Meinung sind, dass das Zusammenführen langsam ist, verwenden Sie die Karte
pandas idxmax ist langsam
Wenn Sie einen Fehler erhalten: Dieser Port wird bereits verwendet. In Django
Warum Pandas verwenden? Apply ()
Wenn Sie NumPy, Pandas, Matplotlib, IPython, SciPy unter Windows verwenden möchten
Wenn Sie die Plot-Funktion von Pandas in Python verwenden, ist sie von der Datenverarbeitung bis zur Diagrammerstellung wirklich nahtlos
[Pandas] Was ist set_option?
Wenn Sie der Meinung sind, dass die PyCharm-Umgebung beschädigt ist, liegt dies am Dateinamen