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)
我想在数据框 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)