【发布时间】:2021-07-15 18:24:14
【问题描述】:
我正在开发一个 ETL 流程,我想知道是否有任何替代方法可以提高我的数据转换性能。
我正在应用这个函数来获取年龄并返回给定年龄的所属年龄组。
def ageGroup(x):
if x>60:
return ">60"
elif x>50:
return "From 51 to 60"
elif x>40:
return "From 41 a 50"
elif x>30:
return "From 31 a 40"
elif x>20:
return "From 21 a 30"
else:
return "<21"
一开始我开始使用apply。
Cst["age_group"]= Cst["age"].apply(lambda x: ageGroup(x))
这给出和平均时间 # --- 0.0012826919555664062 秒 ---。
然后我读了那张地图,在这种情况下它会稍微快一点,然后我试了一下。
Cst["age_group"]= Cst["age"].map(ageGroup)
但只提高一点执行时间。 (# --- 0.001134634017944336 秒 MAP --- )
所以经过研究,我发现这种使用 np 的另一种方法确实没有按我的预期工作。
# Cst["age_group"] = np.select(
# [
# Cst["age"].between(-1, 20, inclusive=True),
# Cst["age"].between(21, 30, inclusive=True),
# Cst["age"].between(31, 40, inclusive=True),
# Cst["age"].between(41, 50, inclusive=True),
# Cst["age"].between(51, 60, inclusive=True),
# ],
# [
# "<21",
# "From 21 to 30",
# "From 31 to 40",
# "From 41 to 50",
# "From 51 to 60",
# ],
# default=">60"
# )
所以我在这里只是想问你是否知道另一种方法来提高我的工作效率。 提前致谢。
【问题讨论】:
-
你可以使用
pandas.cut。
标签: python pandas dataframe numpy apply