Pandas中应用/映射的替代方案



我正在开发一个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.00112826919555664062秒的平均时间。

然后我读了那张地图,在这种情况下稍微快一点,我试了一下

Cst["age_group"]= Cst["age"].map(ageGroup)

但只会稍微提高执行时间。(#---0.0011134634017944336秒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"
#     )

所以我在这里只是想问你,你是否知道另一种方法,使我的工作更有效率。提前谢谢。

pd.cut您的数据具有各种存储箱,并提供适当的标签。

pd.cut(
cst['age'], bins=[0, 20, 30, 40, 50, 60, np.inf], right=True, include_lowest=True,
labels=["<21", "From 21 to 30", "From 31 to 40", "From 41 to 50", "From 51 to 60", '60+'])

请注意,这将返回一个分类序列。如果需要字符串,请附加.astype(str)

相关内容

  • 没有找到相关文章