Фильтровать столбец pandas на основе частоты появления

#pandas

#pandas

Вопрос:

Мой df:

 data = [
    {'Part': 'A', 'Value': 10, 'Delivery': 10},
    {'Part': 'B', 'Value': 12, 'Delivery': 8.5},
    {'Part': 'C', 'Value': 10, 'Delivery': 10.1},
    {'Part': 'D', 'Value': 10, 'Delivery': 10.3},
    {'Part': 'E', 'Value': 11, 'Delivery': 9.2},
    {'Part': 'F', 'Value': 15, 'Delivery': 7.3},
    {'Part': 'G', 'Value': 10, 'Delivery': 10.1},
    {'Part': 'H', 'Value': 12, 'Delivery': 8.1},
    {'Part': 'I', 'Value': 12, 'Delivery': 8.0},
    {'Part': 'J', 'Value': 10, 'Delivery': 10.2},
    {'Part': 'K', 'Value': 8,  'Delivery': 12.5}    
]

df = pd.DataFrame(data)
  

Я хочу отфильтровать фрейм данных из заданного фрейма данных, чтобы он содержал только наиболее часто встречающееся «значение».

Ожидаемый результат:

 data = [
    {'Part': 'A', 'Value': 10, 'Delivery': 10},
    {'Part': 'C', 'Value': 10, 'Delivery': 10.1},
    {'Part': 'D', 'Value': 10, 'Delivery': 10.3},
    {'Part': 'G', 'Value': 10, 'Delivery': 10.1},
    {'Part': 'J', 'Value': 10, 'Delivery': 10.2}
]

df_output = pd.DataFrame(data)
  

есть ли какой-нибудь способ сделать это?

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

1. Использовать mode : df.loc[df.Value.eq(df.Value.mode().item())]

Ответ №1:

Используйте boolean indexing with Series.mode и найдите первое значение по Series.iat :

 df1 = df[df['Value'].eq(df['Value'].mode().iat[0])]
  

Или сравнивать по первому значению индекса в серии, созданной Series.value_counts , поскольку по умолчанию значения сортируются по количеству:

 df1 = df[df['Value'].eq(df['Value'].value_counts().index[0])]
print (df1)
  Part  Value  Delivery
0    A     10      10.0
2    C     10      10.1
3    D     10      10.3
6    G     10      10.1
9    J     10      10.2