[英]How to filter a groupby dataframe based on their values count
我有一个 groupby dataframe 并且我想返回具有最高值计数的前3 个组。
例如下面的 dataframe 预期 output 表应该是group
20,30 和 33
我想显示一个原始数据集表,但是组 function 没有正确显示在 SO 上,那是我上传了一张图片。
amount cosine_group
cosine_group
0 952.5 0
4 3000.0 4
20 2000.0 20
2000.0 20
2000.0 20
27 2000.0 27
30 2100.0 30
2100.0 30
2100.0 30
33 1065.0 33
1065.0 33
1065.0 33
1065.0 33
预期 Output:
amount cosine_group
cosine_group
20 2000.0 20
2000.0 20
2000.0 20
30 2100.0 30
2100.0 30
2100.0 30
33 1065.0 33
1065.0 33
1065.0 33
1065.0 33
您可以使用.nlargest(3)
到 select 的 3 个最大尺寸。 使用.isin()
匹配具有这些值的那些行。 最后,使用.loc
返回原始 dataframe 中最大元素的行,如下:
df = df.rename_axis(index='cosine_group0') # to rename index axis name
df.loc[df['cosine_group'].isin(df.groupby('cosine_group', as_index=False)['cosine_group'].size().nlargest(3, 'size')['cosine_group'].tolist())]
或使用:
df = df.rename_axis(index='cosine_group0') # to rename index axis
df.loc[df["cosine_group"].isin(df["cosine_group"].value_counts().nlargest(3).index)]
这可能不是很pythonic,但绝对可以完成工作。
# retieve the index of the value counts
cosine_group_value = df["cosine_group"].value_counts().index
# get the fist 3 values from the value counts (highest 3 values)
top3 = list(cosine_group_value)[:3]
# filter your dataframe using the top 3 values on the cosine_group column
df = df[df["cosine_group"].isin(top3)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.