我有一个数据帧,如下所示:
ip_address malware_type
ip_1 malware_1
ip_2 malware_2
ip_1 malware_1
ip_1 malware_1
ip_1 malware_2
ip_2 malware_2
ip_2 malware_3
.
.
.我想删除基于'ip_address‘列的重复行,但是当删除发生时,我想只保留对于每个IP最频繁的'malware_type’值。因此,生成的数据帧应该如下所示:
ip_address malware_type
ip_1 malware_1
ip_2 malware_2
.
.
.如果能帮助我实现上述目标,我将不胜感激。谢谢。
发布于 2020-08-09 02:58:25
让我们试试mode
s=df.groupby('ip_address').malware_type.agg(lambda x : x.mode()[0]) # .reset_index()
Out[56]:
ip_address
ip_1 malware_1
ip_2 malware_2
Name: malware_type, dtype: object发布于 2020-08-09 03:04:37
您可以在pd.Series.mode中使用GroupBy.agg
df.groupby('ip_address').malware_type.agg(pd.Series.mode)
ip_address
ip_1 malware_1
ip_2 malware_2
Name: malware_type, dtype: object你可以在这里使用scipy.stats.mode。
from scipy.stats import mode
df.groupby('ip_address').malware_type.agg(lambda x: mode(x).mode)
ip_address
ip_1 malware_1
ip_2 malware_2
Name: malware_type, dtype: object另一种是使用collection.Counter的most_common方法。
def md(s):
c = Counter(s)
return c.most_common(1)[0][0]
df.groupby('ip_address').malware_type.agg(md)
ip_address
ip_1 malware_1
ip_2 malware_2
Name: malware_type, dtype: objecthttps://stackoverflow.com/questions/63319148
复制相似问题