Группировать по применению к нескольким столбцам?

#python #python-3.x #pandas #data-science

#python #python-3.x #панды #наука о данных

Вопрос:

У меня есть df ниже как:

 Name | Factory | Restaurant | Store | Building
Brian    True    False        True     False
Mike     True    True         True     True
Brian    True    False        False    True
Sam      False   False        False    False
Sam      True    False        True     True
Mike     True    False        False    False
  

У меня есть приведенный ниже код, который дает мне количество раз, когда столбец, подобный Factory, является истинным для каждого имени, как я могу добавить остальные или несколько столбцов, чтобы иметь все значения, которые являются истинными для каждого столбца, такого как ресторан, магазин, здание и другие столбцы? Спасибо!

 df.groupby(['Name'])['Factory'].apply(sum).reset_index()
  

Текущий вывод:

 Name | Factory
Brian    2
Mike     2
Sam      1
  

Ожидаемый результат:

 Name | Factory | Restaurant | Store | Building
Brian    2          0           1        1
Mike     2          1           1        1
Sam      1          0           1        1
  

Спасибо!

Ответ №1:

Пара советов: 1) старайтесь не использовать apply , 2) sum не является векторизованной операцией Python, старайтесь избегать этого в пользу 'sum' оператора Pandas.

Просто попробуйте:

 cols = ['Factory', 'Restaurant', 'Store', 'Building']

df.groupby('Name', as_index=False)[cols].sum()
  

Вывод:

     Name  Factory  Restaurant  Store  Building
0  Brian        2           0      1         1
1   Mike        2           1      1         1
2    Sam        1           0      1         1
  

Комментарии:

1. В df есть другие столбцы, могу ли я каким-либо образом выбрать только те, которые я хочу?

Ответ №2:

Когда у вас есть df.groupby(['Name'])['Factory'] , он вернет только столбец Factory

Предполагая Name , что это не ваш индекс, попробуйте:

df.groupby('Name').sum().astype('int')