Pandas: используйте groupby для суммирования при агрегировании определенных значений - PullRequest
1 голос
/ 29 мая 2020

У меня есть следующий pandas фрейм данных:

      Pasture  Surface
Farm                  
01     Sown 1        2
01     Sown 2        3
01    Natural        3
01        Hay        5
02       Sown        7

Я хотел бы сгруппировать по ферме таким образом, чтобы для каждой фермы было только 2 значения пастбищ, sown и not sown, причем первая имеет сумму поверхностей, у которых есть «засеянное» в относительном значении Pasture, а вторая - сумме всех остальных. В основном я хочу получить:

      Pasture  Surface
Farm                  
01       Sown        5
     Not sown        8
02       Sown        7

Мне удалось это сделать, заменив предыдущие имена на относительные, а затем используя .groupby (), но мне было интересно, есть ли способ к этому все в вызове .groupby () или в любом случае, что было бы лучше всего. Спасибо!

(PS: это мой первый вопрос о переполнении стека, дайте мне знать, если бы я мог сделать что-то лучше!)

1 Ответ

0 голосов
/ 29 мая 2020

Я бы сделал:

sown_or_not = np.where(df.Pasture.str.contains('Sown'), 'Sown', 'Not Sown')

df.groupby(['Farm', sown_or_not]).Surface.sum()

Вывод:

Farm          
1     Not Sown    8
      Sown        5
2     Sown        7
Name: Surface, dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...