[英]How to SELECT DISTINCT() and then keep rows with most frequent value in another column?
[英]Pandas drop duplicates on one column and keep only rows with the most frequent value in another column
我有一个 dataframe,如下所示:
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”值。因此生成的 dataframe 应该如下所示:
ip_address malware_type
ip_1 malware_1
ip_2 malware_2
.
.
.
我真的很感激任何有助于实现上述目标的帮助。 谢谢。
让我们试试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
我有一个 dataframe,如下所示:
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”值。 所以生成的 dataframe 应该如下所示:
ip_address malware_type
ip_1 malware_1
ip_2 malware_2
.
.
.
我真的很感激任何帮助来实现上述目标。 谢谢。
您可以将GroupBy.agg
与pd.Series.mode
一起使用
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: object
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.