#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