【问题标题】:Concatenate Using Lambda And Conditions使用 Lambda 和条件连接
【发布时间】:2017-01-31 16:30:37
【问题描述】:

我正在尝试使用 lambda 和 map 在我的数据框中创建一个新列。本质上,如果满足条件,新列将采用 A 列,而 B 列是不满足条件。请在下面查看我的代码。

df['LS'] = df.['Long'].map(lambda y:df.Currency if y>0 else df.StartDate)

但是,当我这样做时,函数会将整个列返回到我的新列中的每个项目。

在英语中,我将浏览 Long 列中的每个项目 y。如果项目 > 0,则取“货币”列中的第 y 个值。否则取“开始”列中的第 y 个值。

运行上面的迭代非常慢。还有其他选择吗?

谢谢! 詹姆斯

【问题讨论】:

  • df.[…] 是语法错误。您确定这正是您正在运行的代码吗?
  • 你想要的IIUCdf['LS'] = df['Currency'].where(df['Long']>0,df['StartDate'])

标签: python pandas lambda


【解决方案1】:

做吧

df['LS']=np.where(df.Long>0,df.Currency,df.StartDate)

这是一种很好的矢量化方法。

df.Long.map 应用于每一行,但实际上返回 df.Statedf.current,它们是 Series。

另一种方法是考虑:

df.apply(lambda row : row[1] if row[0]>0 else row[2],1)

也适用于df.columns=Index(['Long', 'Currency', 'StartDate', ...])

但它不是矢量方法,所以它很慢。 (在这种情况下,1000 行慢 200 倍)。

【讨论】:

    【解决方案2】:

    您也可以使用where

    df['LS'] = df['Currency'].where(df['Long']>0,df['StartDate'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-25
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      相关资源
      最近更新 更多