内联if语句条件熊猫为新列分配值

时间:2019-06-17 19:25:01

标签: python pandas

我正在尝试使用pandas分配条件将值分配给列。

如果列sv_length指定的长度值> = 50且InDel如果长度<50,我尝试使用pandas Assign创建新列并将其标记为SV。

df3=df2.assign(InDel_SV='InDel' if df2.sv_length < 50 else 'SV')

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

其他示例使用np.where。为什么我必须使用numpy?这个简单的功能不应该是熊猫的一部分吗?

https://chrisalbon.com/python/data_wrangling/pandas_create_column_using_conditional/

1 个答案:

答案 0 :(得分:0)

通过使用apply支持此语法。

df3 = df2.assign(
    InDel_SV=df2.sv_length.apply(lambda x: 'InDel' if x < 50 else 'SV'))

但是,出于性能考虑,建议您使用numpy,因为apply is a slow convenience function。完成此操作的熊猫方法是使用numpy.where

df3 = df2.assign(InDel_SV=np.where(df2.sv_length < 50, 'InDel', 'SV'))