【问题标题】:Pandas indexing by column pairs (5-tuple)Pandas 按列对索引(5 元组)
【发布时间】:2021-10-29 19:38:12
【问题描述】:

我正在尝试为网络 5 元组设置流 id,原始数据帧如下所示:

tup = [['192.168.0.1', '1032', '192.168.0.2', '443'],
   ['192.168.0.1', '1032', '192.168.0.2', '443'],
   ['192.168.0.1', '1034', '192.168.0.2', '443'],
   ['192.168.0.2', '443', '192.168.0.1', '1034'],
   ['192.168.0.1', '1034', '192.168.0.2', '443'],
   ['192.168.0.1', '1034', '192.168.0.2', '443'],
   ['192.168.0.2', '443', '192.168.0.1', '1034'],
   ['192.168.0.2', '443', '192.168.0.1', '1034'],
   ['192.168.0.1', '1032', '192.168.0.2', '443'],
   ['192.168.0.2', '443', '192.168.0.1', '1032']]

df = pd.DataFrame(tup,columns=['src','src_port','dst','dst_port'])

对于来自同一流(入站/出站)的流量,应将流 ID 设置为:

src src_port    dst dst_port    flow_id
0   192.168.0.1 1032    192.168.0.2 443 1
1   192.168.0.1 1032    192.168.0.2 443 1
2   192.168.0.1 1034    192.168.0.2 443 2
3   192.168.0.2 443 192.168.0.1 1034    2
4   192.168.0.1 1034    192.168.0.2 443 2
5   192.168.0.1 1034    192.168.0.2 443 2
6   192.168.0.2 443 192.168.0.1 1034    2
7   192.168.0.2 443 192.168.0.1 1034    2
8   192.168.0.1 1032    192.168.0.2 443 1
9   192.168.0.2 443 192.168.0.1 1032    1

我将数据帧转换为值并将它们排序在一起,但坚持设置正确的流索引。

有没有更快/优雅的方式?

【问题讨论】:

    标签: python pandas pcap network-flow


    【解决方案1】:

    一个想法是成对排序的——嵌套元组,然后调用factorize

    a = df[['src','src_port','dst','dst_port']].to_numpy()
    s = [tuple(sorted(((x[0], x[1]), (x[2], x[3])))) for x in a]
    df['flow_id'] = pd.factorize(s)[0] + 1
    
    print (df)
               src src_port          dst dst_port  flow_id
    0  192.168.0.1     1032  192.168.0.2      443        1
    1  192.168.0.1     1032  192.168.0.2      443        1
    2  192.168.0.1     1034  192.168.0.2      443        2
    3  192.168.0.2      443  192.168.0.1     1034        2
    4  192.168.0.1     1034  192.168.0.2      443        2
    5  192.168.0.1     1034  192.168.0.2      443        2
    6  192.168.0.2      443  192.168.0.1     1034        2
    7  192.168.0.2      443  192.168.0.1     1034        2
    8  192.168.0.1     1032  192.168.0.2      443        1
    9  192.168.0.2      443  192.168.0.1     1032        1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 2022-09-27
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多