Как получить два наибольших значения из столбца?
Из подобного DataFrame:
df1 = pd.DataFrame({
"Car": ['Model_1', 'Model_1', 'Model_1', 'Model_3', 'Model_1', 'Model_3', 'Model_2', 'Model_2', 'Model_2', 'Model_2', 'Model_1', 'Model_1', 'Model_1', 'Model_2', 'Model_2', 'Model_3'],
"City": ['Moscow', 'Moscow', 'Perm', 'Perm', 'Omsk', 'Omsk', 'Orel', 'Tula', 'Tula', 'Kazan', 'Voronez', 'Voronez', 'Voronez', 'Kazan', 'Kazan', 'Omsk']})
делаю groupby:
df2 = pd.DataFrame(df1.groupby('Car')['City'].value_counts())
и получаю такой DataFrame:
Как мне из него получить топ-2 значения столбца City и расположить их по-столбцам?
Спасибо, за помощь!
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
df1 = pd.DataFrame({
"Car": ['Model_1', 'Model_1', 'Model_1', 'Model_3', 'Model_1', 'Model_3', 'Model_2', 'Model_2', 'Model_2', 'Model_2', 'Model_1', 'Model_1', 'Model_1', 'Model_2', 'Model_2', 'Model_3'],
"City": ['Moscow', 'Moscow', 'Perm', 'Perm', 'Omsk', 'Omsk', 'Orel', 'Tula', 'Tula', 'Kazan', 'Voronez', 'Voronez', 'Voronez', 'Kazan', 'Kazan', 'Omsk']})
r = df1.groupby("Car")["City"].apply(lambda x: x.value_counts().head(2))
res = (r
.reset_index()
.assign(top=["Top_1", "Top_2"] * df1["Car"].nunique())
.pivot(index="Car", columns="top", values="City")
.rename_axis(None)
.rename_axis(None, axis=1))
результат:
In [73]: res
Out[73]:
Top_1 Top_2
Model_1 3 2
Model_2 3 2
Model_3 2 1

