Как определить, появляется ли наиболее распространенное значение столбца более X% раз?

#pandas

#pandas

Вопрос:

Рассмотрим следующий фрейм данных:

   ID   Column
0 500  2
1 500  2
2 500  2
3 500  2
4 500  2
5 500  4
  

Как мы можем увидеть, появляется ли наиболее распространенное значение столбца более X% раз?

Я пытался сделать: df.locate[df.groupby('ID')['Column'].count_values(normalize=True).max() > X] , но я получаю сообщение об ошибке.

Ответ №1:

Я думаю, что то, что у вас было, было близко к решению. Мне не совсем понятно, хотите ли вы вычислить это только для всего столбца или для каждой группы, так что вот решение для обоих. Вы можете изменить переменную at_least_this_proportion , чтобы изменить минимальный порог:

 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)]
  

Комментарии:

1. Я не уточнил это должным образом. Я хотел второе (т. Е. Для каждой группы). Спасибо, что предоставили оба варианта! Однако я бы хотел, чтобы на выходе были все строки, идентификатор которых соответствует условию. В приведенном вами примере все строки удовлетворяют этому условию. То есть даже 5-я строка (500 4) будет True и, таким образом, будет возвращена.

2. хорошо, изменено решение: поиск идентификаторов, соответствующих пороговому значению, и получение всех строк для этих идентификаторов