根据另一列的值创建新列

aur.serv

我在具有不同字符串的数据框中有一列。

Additional Information  |  
IP=192.168.1.1, MAC ADDR=00:0a:95:9d:68:16, USER=kwfinn  
IP=192.168.0.1, MAC ADDR=00:0a:95:9d:68:17, USER=wattray  
Undefined System Error  
Specific groupname=CUSTGR1
IP=192.168.1.2, MAC ADDR=00:1B:44:11:3A:B7, USER=stwnck  

我想要做的是使用上面列中的相应值创建新列,即IP地址和MAC地址。

这样预期的输出如下所示:

Additional Information                                  |IP Address  | MAC Address     |    
IP=192.168.1.1, MAC ADDR=00:0a:95:9d:68:16, USER=kwfinn |192.168.1.1 |00:0a:95:9d:68:16|  
IP=192.168.0.1, MAC ADDR=00:0a:95:9d:68:17, USER=wattray|192.168.0.1 |00:0a:95:9d:68:17|   
Undefined System Error                                  |            |                 |
Specific groupname=CUSTGR1                              |            |                 |  
IP=192.168.1.2, MAC ADDR=00:1B:44:11:3A:B7, USER=stwnck |192.168.1.2 |00:1B:44:11:3A:B7|  

问题是,我无法处理不包含IP和MAC的行。我尝试使用np.where拆分以及找到部分匹配项,但未成功。

耶斯列尔

想法是使用列表理解,如果不丢失值或无且存在,过滤,则使用过滤,=传递给DataFrame构造函数,最后一次使用DataFrame.join为原始方法:

L = [dict(y.split("=") for y in v.split(", "))  
         if pd.notna(v) and ('=' in v) and (', ' in v)
         else {}
         for v in df['Additional Information']]

df1 = pd.DataFrame(L, index=df.index)
print (df1)
            IP           MAC ADDR     USER
0  192.168.1.1  00:0a:95:9d:68:16   kwfinn
1  192.168.0.1  00:0a:95:9d:68:17  wattray
2          NaN                NaN      NaN
3          NaN                NaN      NaN
4  192.168.1.2  00:1B:44:11:3A:B7   stwnck

df = df.join(df1[['IP','MAC ADDR']])
print (df)
                              Additional Information           IP  \
0  IP=192.168.1.1, MAC ADDR=00:0a:95:9d:68:16, US...  192.168.1.1   
1  IP=192.168.0.1, MAC ADDR=00:0a:95:9d:68:17, US...  192.168.0.1   
2                           Undefined System Error            NaN   
3                         Specific groupname=CUSTGR1          NaN   
4  IP=192.168.1.2, MAC ADDR=00:1B:44:11:3A:B7, US...  192.168.1.2   

            MAC ADDR  
0  00:0a:95:9d:68:16  
1  00:0a:95:9d:68:17  
2                NaN  
3                NaN  
4  00:1B:44:11:3A:B7  

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据另一列的值创建新列

根据另一列中的值创建新列

Pandas 根据另一列的非空值创建一个新列

根据另一列的值在熊猫中创建新列

根据分组按另一列创建最接近值的新列

是否可以根据值在另一列中更改的时间来创建新列?

通过根据条件连接另一列的值来创建新的pyspark DataFrame列

使用 map() 时出错:根据另一列中的值创建新的 Pandas 列

根据另一列中的字符串值创建新列

根据r中另一列的观测值创建新列

根据列表中的另一列内容创建新的列值

Pandas:根据另一列的文本值创建新列

熊猫根据另一列选定的值创建新列

根据另一列中的值的最后两位数字创建新列

如何根据另一列 SQL 中的值创建具有计数值的新列

根据另一列熊猫的300条相邻行中的值创建新列

根据熊猫中另一列的值创建新列

跟进-根据熊猫中另一列的值创建新列

根据另一列的值创建索引数最大的新列

Pandas - 根据 str 包含从另一列创建带有值的新列

根据另一列熊猫的值添加新列

根据前一列中的值创建新列

根据另一列和另一个表中的值创建一个新列

如何迭代另一列中的嵌套字段以根据另一个值创建新列?

根据一列的字符和另一列的条件创建新列

根据另一列的值创建总行

根据另一列的值创建滞后

Excel:根据一列值和另一列类别创建列

根据另一列 pandas 中特定值的累积出现次数创建一个新列