【问题标题】:summarize dataframe columns by the most common values按最常见的值汇总数据框列
【发布时间】:2021-01-04 11:47:56
【问题描述】:

我有一个如下所示的数据框:

source_ip    destination_ip    malware_tag    ransomware_tag    brutefore_tag    source_bytes    destination_bytes    label
ip_1         ip_2              True           True               False            10              20                   0
ip_1         ip_2              True           False              False            20              60                   0
ip_1         ip_2              True           False              False            30              100                   0
ip_1         ip_2              True           True               False            40              300                   0
ip_3         ip_4              False          False              True             5              20                   1
ip_3         ip_4              False          False              True             500              9                   1
ip_3         ip_4              False          True               True             200              15                   1

我首先要为每个“标签”创建一个名为“攻击类型”的新列,该列是基于三个布尔标签列创建的;通过仅考虑最常见/最频繁的攻击标志。所以我希望生成的数据框如下所示:

source_ip    destination_ip      source_bytes    destination_bytes    label    attack_type
ip_1         ip_2                10              20                   0        malware
ip_1         ip_2                20              60                   0        malware
ip_1         ip_2                30              100                  0        malware
ip_1         ip_2                40              300                  0        malware
ip_3         ip_4                5               20                    1       bruteforre
ip_3         ip_4                500             9                   1         bruteforce
ip_3         ip_4                200             15                  1         bruteforce

第二次按源和目标 IP 汇总(源和目标字节的总和)生成的数据帧。所以最终的数据框应该是这样的:

source_ip    destination_ip    total_source_bytes    total_destination_bytes    attack_type
ip_1         ip_2              100                   480                        malware
ip_3         ip_4              705                   44                         bruteforce

我将不胜感激任何帮助来实现这一点。谢谢。

【问题讨论】:

    标签: pandas dataframe group-by sum frequency


    【解决方案1】:

    让我们尝试idxmax 提取每个标签的攻击类型,然后map 将标签转换为最常见的攻击类型:

    atk_by_labels = df.filter(like='tag').groupby(df['label']).sum().idxmax(1)
    
    # first summary
    df['attack_type'] = df['label'].map(atk_by_labels)
    
    # second summary
    (df.groupby(['source_ip', 'destination_ip', 'attack_type'], as_index=False)
       [['total_source_bytes','total_destination_bytes']].sum()
    )
    

    【讨论】:

      猜你喜欢
      • 2022-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      相关资源
      最近更新 更多