【发布时间】:2021-10-12 11:04:06
【问题描述】:
我使用像这样的 lambda 函数来传递行值,它们可以按需要工作:
def get_price(row, source):
if source == 'cgo':
return row.price
df_merged['price'] = df_merged.apply(lambda x: get_price(x, 'cgo')
, axis=1)
但是,现在我想使用更复杂的 lambda 函数。例如,如果 df_merged.art = 'R' 和 df_merged.ust = 'J',那么我想从 df_merged.kst 返回第一个非空值的 前 2 个字符 列。我正在尝试这个:
def get_id(row, source):
if source == 'cgo':
found = False
if found == False:
#if row.kst != Null:
if (row.kst):
first_kst= row.kst
logger.debug(f"first_kst : {first_kst}")
found = True
if row.art == "R" and row.ust == "J":
return first_kst[:2]
df_merged['id'] = df_merged.apply(lambda x: get_id(x, 'cgo')
, axis=1)
当我找到第一个非空值时,我使用布尔值found 停止搜索。然后,当条件满足时,我返回了存储的first_kst 值。但是,这并没有按预期工作。
在我的打印日志中,我看到 DEBUG | first_kst : nan | 多次,即使我的打印语句在if 语句内并且它应该只打印一次,当值不为空并且找到第一个非值时。有什么替代方法可以实现这一目标?
【问题讨论】:
标签: python pandas dataframe numpy lambda