Python lambda 函数根据值数学是否形成另一个 df 列在 DF 中创建和填充列

Python lambda function to create a and populate column in DF depending if a value math form another df column

我想在数据框 df_master_ls_and_ips 中创建并填充列 ['EX_Excluded'],具体取决于是否在另一个数据框列 df_ip_excluded['EX_net_ip'] 的列中找到 IP。

row 保存正在迭代的 ip 地址,如果该 IP 存在于已排除的 IP 中,则单元格值为“已排除”,否则为“未排除”

下面是该行的最后一个“工作”版本:

df_master_ls_and_ips['EX_Excluded'] = df_master_ls_and_ips['LS_ip'].apply (lambda row: 
    "Excluded" if df_ip_excluded['EX_net_ip'].any() == row else "Not Excluded")

我尝试了不同的方法来遍历 df_ip_excluded['EX_net_ip'] 列并将其与来自 lambda 的行变量进行比较,但其中 none 有效。

新列df_master_ls_and_ips['EX_Excluded']中的所有单元格都被“已排除”填充,并且需要很长时间才能完成,我猜迭代迭代不好,但我有点迷茫.

感谢任何帮助。

IIUC,您的测试应该检查成员资格:

df_master_ls_and_ips['EX_Excluded'] = df_master_ls_and_ips['LS_ip'].apply(lambda row: "Excluded" if row in df_ip_excluded['EX_net_ip'] 
                                                                          else "Not Excluded")

您还可以将 df_ip_excluded['EX_net_ip'] 转换为集合并使用列表理解(应该比调用 lambda 更快):

excluded = set(df_ip_excluded['EX_net_ip'])
df_master_ls_and_ips['EX_Excluded'] = ["Excluded" if row in excluded else "Not Excluded" for row in df_master_ls_and_ips['LS_ip']]

我们也可以使用 numpy 广播:

df_master_ls_and_ips['EX_Excluded'] = (df_master_ls_and_ips['LS_ip'].to_numpy()[:, None]==df_ip_excluded['EX_net_ip'].to_numpy()).any(axis=1)