pandas 根据条件使用其他列中的数据创建新的 Dataframe 列

j2cgzkjk  于 2023-03-06  发布在  其他
关注(0)|答案(1)|浏览(97)

我有一个像这样的数据框

Name        Default Expression    Override Expression 
0   AACT_NAM        pystr                   pyint
1   ACCT_CCY        pystr
2   ACCT_TYP        pystr

我想创建一个列_faker_method_,该列将包含经过特殊转换的数据,方法是检查Override Expression是否有值,如果有值则使用它,如果没有值则使用Default Expression列。
我试着这样做

df['_faker_invocation_'] = df['Override Expression'].apply(lambda x: render_faker_expresison(df['Name'], x) if x else df['Default Expression'])

但日志应该我的函数render_faker_expression接收整个列与索引(因此它在我的应用程序失败)

0                           ACCT_NAM
1                           ACCT_CCY
2                           ACCT_TYP

如何执行我需要的操作?

a0x5cqrl

a0x5cqrl1#

你没有共享render_faker_expression(或者至少没有共享它的签名),这使得问题很难解决,但是由于它似乎需要一个标量值而不是一个序列,我猜你应该按行应用lambda函数:

df['_faker_invocation_'] = df.apply(lambda row: render_faker_expresison(row['Name'], row['Override Expression'])
                                                if row['Override Expression']
                                                else row['Default Expression'], axis=1)

具有以下虚拟功能:

def render_faker_expresison(n, x):
    return x + "_fake_" + n

这给我们:

Name Default Expression Override Expression   _faker_invocation_
ID                                                                      
0   AACT_NAM              pystr               pyint  pyint_fake_AACT_NAM
1   ACCT_CCY              pystr                None                pystr
2   ACCT_TYP              pystr                None                pystr

相关问题