【问题标题】:Pandas dataframe apply lambda based on inputs from multiple columnsPandas 数据框根据来自多列的输入应用 lambda
【发布时间】:2019-12-05 06:26:22
【问题描述】:

假设我有一个如下所示的数据框:


如何在数据框上应用 lambda 以使 FullName = FirstName + ' ' + LastName?据我所知,数据帧中的 lambda 只有 1 个输入?谢谢!

【问题讨论】:

    标签: python pandas dataframe lambda


    【解决方案1】:

    我觉得apply这里没必要,只和+一起加入列:

    df['FullName'] = df.FirstName + ' ' + df.LastName
    

    或者使用Series.str.cat:

    df['FullName'] = df.FirstName.str.cat(df.LastName, sep=' ')
    

    lambda 的解决方案是可能的,但速度很慢:

    df['FullName'] = df.apply(lambda x: x.FirstName + ' ' + x.LastName, axis=1)
    

    【讨论】:

    • 完美!那行得通:-)不幸的是,我必须使用 lambda,因为我遇到的问题更复杂(有 if 语句)。为简单起见,我发布了该示例。关于速度的后续问题...... lambda 一般是慢还是在这种特定情况下(应用于数据帧时)?
    • @ShadyMBA - 这取决于公式。但通常是使用apply 它很慢,因为在引擎盖下循环。
    • @ShadyMBA - 然后使用this
    • @ShadyMBA - 你可以测试df['GlobalName'] = np.where((df['GlobalName']=='') & (df['IsPerson']), df['CleanName'], '') 吗?
    • 3 个解决方案:%timeit df['GlobalName'][df['GlobalName']==''] = df.apply(lambda x: x['CleanName'] if x['IsPerson'] == True else '', axis = 1) %timeit df['GlobalName'][df['GlobalName']==''] = np.where(df['IsPerson']==True, df['CleanName'], '') %timeit df['GlobalName'] = np.where((df['IsPerson']==True) & (df['GlobalName']==''), df['CleanName'], df['GlobalName']) 39.6 ms 40.6 ms 1.21 ms 第 3 个解决方案比其他 2 个解决方案更快。
    猜你喜欢
    • 2018-03-28
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2020-05-30
    • 2013-08-31
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多