Фильтр многоуровневых панд groupby - PullRequest
0 голосов
/ 31 августа 2018

Как я могу фильтровать панд Groupby многоуровневый?

Пример:

import pandas as pd

df = pd.DataFrame( {"Country" : ["Brazil", "Brazil", "Brazil", "Italy", "Italy", "Brazil"],
                    "City" : ["Sao Paulo", "Sao Paulo", "Rio de Janeiro", "Roma", "Roma", "Sao Paulo"],
                    "Vehicule" : ["Bike", "Car", "Car", "Car", "Bike", "Bike"],
                    "Value" : [1, 2, 3, 4, 5,6]})
group = df.groupby(by=["Country", "City", "Vehicule"]).sum().loc[:,"Value"]
print(group)

Как я могу отфильтровать только уровень по машине "Bike" и показать мне процент велосипедов и автомобилей.

1 Ответ

0 голосов
/ 31 августа 2018

Самый простой способ - сначала отфильтровать, а затем сгруппировать:

df[df.Vehicule=="Bike"].groupby(["Country", "City"]).sum()

Или:

df.groupby(["Country", "City", "Vehicule"]).sum().unstack().Value.Bike

Последний производит NaN для городов, где нет:

Country  City          
Brazil   Rio de Janeiro    NaN
         Sao Paulo         7.0
Italy    Roma              5.0

Или в виде дроби:

x = df.groupby(["Country", "City", "Vehicule"]).sum().unstack().Value
x.Bike / x.sum(1)

Дает вам:

Country  City          
Brazil   Rio de Janeiro         NaN
         Sao Paulo         0.777778
Italy    Roma              0.555556
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...