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.
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.
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