首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas在一列中删除重复项,而在另一列中仅保留具有最频繁值的行

Pandas在一列中删除重复项,而在另一列中仅保留具有最频繁值的行
EN

Stack Overflow用户
提问于 2020-08-09 02:53:14
回答 2查看 1K关注 0票数 2

我有一个数据帧,如下所示:

代码语言:javascript
复制
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’值。因此,生成的数据帧应该如下所示:

代码语言:javascript
复制
ip_address    malware_type
ip_1          malware_1
ip_2          malware_2
.
.
.

如果能帮助我实现上述目标,我将不胜感激。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-09 02:58:25

让我们试试mode

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2020-08-09 03:04:37

您可以在pd.Series.mode中使用GroupBy.agg

代码语言:javascript
复制
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

代码语言:javascript
复制
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.Countermost_common方法。

代码语言:javascript
复制
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: object
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63319148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档