按最常见的值汇总数据框列
summarize dataframe columns by the most common values
我有一个如下所示的数据框:
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
我首先要为每个 'label' 创建一个名为 'attack type' 的新列,该列是基于三个布尔标记列创建的;通过仅考虑最多 common/frequent 攻击标志。所以我希望生成的数据框如下所示:
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 和目标 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
对于实现此目标的任何帮助,我将不胜感激。谢谢
让我们尝试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()
)
我有一个如下所示的数据框:
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
我首先要为每个 'label' 创建一个名为 'attack type' 的新列,该列是基于三个布尔标记列创建的;通过仅考虑最多 common/frequent 攻击标志。所以我希望生成的数据框如下所示:
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 和目标 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
对于实现此目标的任何帮助,我将不胜感激。谢谢
让我们尝试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()
)