【问题标题】:Alternatives to Apply/Map in Pandas在 Pandas 中应用/映射的替代方案
【发布时间】: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"
 #     )

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

【问题讨论】:

标签: python pandas dataframe numpy apply


【解决方案1】:

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)

【讨论】:

  • 由于他对性能感兴趣,我会注意到timeit(lambda : df.age.map(ageGroup), number =100)返回1.5秒timeit(lambda : pd.cut(df.age, [0,16,21,35,60,np.inf]) , number =100)返回0.34秒
  • numpy_select 在这里也有帮助,尽管pd.cut 是一个很好且高效的抽象
猜你喜欢
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
  • 2022-12-22
  • 2011-11-16
  • 2020-08-29
  • 2012-04-10
  • 1970-01-01
  • 2022-01-25
相关资源
最近更新 更多