gpt4 book ai didi

python - 从连接中填充数据帧 nan 值

转载 作者:太空狗 更新时间:2023-10-30 00:37:38 25 4
gpt4 key购买 nike

我试图通过使用两个表 df1 和 df2 将所有者映射到 IP 地址。 df1 包含要映射的 IP 列表,df2 包含 IP、别名和所有者。在 IP 列上运行连接后,它给了我一个半连接的数据框。大多数剩余数据都可以通过在别名列上用联接替换 NaN 值来联接,但我不知道该怎么做。

我最初的想法是尝试将 pd.merge 嵌套在 fillna() 中,但它不接受数据框。任何帮助将不胜感激。

df1 = pd.DataFrame({'IP' : ['192.18.0.100', '192.18.0.101', '192.18.0.102', '192.18.0.103', '192.18.0.104']})
df2 = pd.DataFrame({'IP' : ['192.18.0.100', '192.18.0.101', '192.18.1.206', '192.18.1.218', '192.18.1.118'],
'Alias' : ['192.18.1.214', '192.18.1.243', '192.18.0.102', '192.18.0.103', '192.18.1.180'],
'Owner' : ['Smith, Jim', 'Bates, Andrew', 'Kline, Jenny', 'Hale, Fred', 'Harris, Robert']})
new_df = pd.DataFrame(pd.merge(df1, df2[['IP', 'Owner']], on='IP', how= 'left'))

预期输出是:

IP            Owner
192.18.0.100 Smith, Jim
192.18.0.101 Bates, Andrew
192.18.0.102 Kline, Jenny
192.18.0.103 Hale, Fred
192.18.0.104 nan

最佳答案

不需要合并,只需要拉取满足条件的数据。这比合并要快得多,也不那么复杂。

condition = (df1['IP'] == df2['IP']) | (df1['IP'] == df2['Alias'])
df1['Owner'] = np.where(condition, df2['Owner'], np.nan)
print(df1)
IP Owner
0 192.18.0.100 Smith, Jim
1 192.18.0.101 Bates, Andrew
2 192.18.0.102 Kline, Jenny
3 192.18.0.103 Hale, Fred
4 192.18.0.104 NaN

关于python - 从连接中填充数据帧 nan 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57810886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com