Pandas 如何确定列的最常见值出现的次数是否超过X%?

Pandas 如何确定列的最常见值出现的次数是否超过X%?,pandas,Pandas,考虑以下数据帧: ID Column 0 500 2 1 500 2 2 500 2 3 500 2 4 500 2 5 500 4 我们如何判断“Column”的最常见值出现的次数是否超过X% 我尝试过这样做:df.locate[df.groupby('ID')['Column'].count\u values(normalize=True).max()>X],但我得到了一个错误。我想你已经接近解决方案了。我不太清楚,如果你想计算整个列,或者每个组,这里有一个解决方案。您

考虑以下数据帧:

  ID   Column
0 500  2
1 500  2
2 500  2
3 500  2
4 500  2
5 500  4
我们如何判断“Column”的最常见值出现的次数是否超过X%


我尝试过这样做:
df.locate[df.groupby('ID')['Column'].count\u values(normalize=True).max()>X]
,但我得到了一个错误。

我想你已经接近解决方案了。我不太清楚,如果你想计算整个列,或者每个组,这里有一个解决方案。您可以更改变量
至少此比例,以更改最小阈值:

import pandas as pd
from io import StringIO

text = """
  ID   Column
0 500  2
1 500  2
2 500  2
3 500  2
4 500  2
5 500  4
6 501  2
7 501  2
"""

df = pd.read_csv(StringIO(text), header=0, sep='\s+')

# set minimum threshold
at_least_this_proportion = 0.5
按组计算:

# find the value that occurs at least 50% within its group
value_counts_per_group = df.groupby('ID')['Column'].value_counts(normalize=True)
ids_that_meet_threshold = value_counts_per_group[value_counts_per_group > at_least_this_proportion].index.get_level_values(0)

# get all rows for which the id meets the threshold
df[df['ID'].isin(ids_that_meet_threshold)]

我没有适当地澄清它。我想要第二个(即每组)。谢谢你提供了这两个!但是,我希望输出的是ID满足条件的所有行。在您给出的示例中,所有行都满足此条件。也就是说,即使第5行(5004)也是正确的,因此返回。好的,改变了解决方案:找到满足阈值的id,并获取这些id的所有行