#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')