Группировка и получение количества для нескольких столбцов - PullRequest
0 голосов
/ 10 мая 2019

У меня есть датафрейм типа

column_one  columnn_two     type    column_three    
apple       headphones      one         yes
apple       headphones      two         yes
apple       tv              one         no
apple       iPhones         two         yes
apple       iPad            one         no
apple       iPad            two         no

Я хочу группировать по нескольким строкам и получить их счет как

column_one  columnn_two     yes         no  
apple       headphones      2           0
apple       tv              0           1
apple       iPhones         1           0
apple       iPad            0           2

Я знаю о том, как выполнять групповую работу, но не уверен, как подсчитать несколько строк и преобразовать строки в столбцы, чтобы получить счет.

1 Ответ

2 голосов
/ 10 мая 2019

Вероятно, не самый эффективный способ, но, возможно, он все еще помогает: -)

Я использовал пользовательскую функцию агрегирования sum_col_three(x) с помощью apply() и преобразовал результаты в новый столбец с помощью to_frame(). После этого я разделил кортеж на две отдельные колонки с новыми DataFrame и tolist():

def sum_col_three(x):
    return sum(x['column_three']=='yes'), sum(x['column_three']=='no')

df = df.groupby(['column_one', 'column_two']).apply(sum_col_three).to_frame('yes')
df[['yes', 'no']] = pd.DataFrame(df['yes'].tolist(), index=df.index) 

df

>>                           yes    no
>>column_one    column_two      
>>apple         headphones   2      0
>>              iPad         0      2
>>              iPhones      1      0
>>              tv           0      1
...