У меня есть датафрейм с записями, характеризующими поверхности крыш зданий, поэтому у каждого здания есть несколько плоскостей, с площадью и описанием ее формы.например,
df=pd.DataFrame([[1000, 12, 'slope'],
[1000, 10, 'flat'],
[1001, 10, 'slope'],
[1001, 15, 'flat'],
[1001, 7, 'slope']],
index = [1,2,3,4,5],
columns=['building_id', 'area', 'form'],
)
df
building_id area form
1 1000 12 slope
2 1000 10 flat
3 1001 10 slope
4 1001 15 flat
5 1001 7 slope
Я хочу объединить ряды, чтобы у меня было по одному для каждого здания, с общей площадью крыши и преобладающей формой крыши - то есть формой, которая имеет наибольшую площадь для этого здания, а не формойчаще всего появляется:
df_out
building_id area form
1 1000 22 slope
2 1001 32 slope
Мне нужно что-то вроде этого:
group_functions={'area' : ['sum'],
'form' : lambda x: find_predominant(x)}
df_out = df.groupby('building_id').agg(group_functions)
Но find_predominant
должна быть функцией area
, а также form
:возвращает строку 'flat'
или 'slope'
в зависимости от того, какая область имеет наибольшую для этого building_id
.
Что такое функция find_predominant
?Или какой сценарий будет иметь такой же эффект?