Pandas:如何添加一个列的值基于不同列的条件

6yoyoihd  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(142)

我正在分析一个由5列组成的互联网通信数据集,下面是一个示例
| IP源|IPDst|端口源|端口日期|长度|
| - ------|- ------|- ------|- ------|- ------|
| IP1|IP2|初级1|第二阶段|三十五|
| IP3防护等级|防护等级4|Pr3|Pr4|三十六|
| IP2|IP1|第二阶段|初级1|八十八|
| 防护等级4|IP3防护等级|Pr4|Pr3|一百五十|
| IP5防护等级|IP6防护等级|Pr5|Pr6|十一|
| IP1|防护等级4|Pr8|Pr9|三十六|
我想获取相同的数据集,但具有新列Length 2,其中Length 2是符合这些条件的行的值:

IPSrc = IPDst
IPDst = IPSrc
PortSrc = PortDst
PortDst = PortSrc

因此,在本例中,理想结果是:
| IP源|IPDst|端口源|端口日期|长度|长度2|
| - ------|- ------|- ------|- ------|- ------|- ------|
| IP1|IP2|初级1|第二阶段|三十五|八十八|
| IP3防护等级|防护等级4|Pr3|Pr4|三十六|一百五十|
| IP2|IP1|第二阶段|初级1|八十八|三十五|
| 防护等级4|IP3防护等级|Pr4|Pr3|一百五十|三十六|
| IP5防护等级|IP6防护等级|Pr5|Pr6|十一||
| IP1|防护等级4|Pr8|Pr9|三十六||
已知数据集包含100万行,如果给出的答案能考虑性能,我们将不胜感激。
提前感谢:)

g9icjywg

g9icjywg1#

使用DataFrame.join,匹配列转换为index,列在参数on中:

df = df.join(df.set_index(['IPSrc','PortSrc'])['Length'].rename('Length 2'), 
             on=['IPDst','PortDst'])
print (df)
  IPSrc IPDst PortSrc PortDst  Length  Length 2
0   IP1   IP2     Pr1     Pr2      35      88.0
1   IP3   IP4     Pr3     Pr4      36     150.0
2   IP2   IP1     Pr2     Pr1      88      35.0
3   IP4   IP3     Pr4     Pr3     150      36.0
4   IP5   IP6     Pr5     Pr6      11       NaN
5   IP1   IP4     Pr8     Pr9      36       NaN

相关问题