分组并获取多个列的计数

时间:2019-05-09 22:18:50

标签: python group-by grouping

我有一个类似

的数据框
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 个答案:

答案 0 :(得分:2)

可能不是最有效的方法,但也许仍然有帮助:-)

我通过sum_col_three(x)使用了自定义聚合函数apply(),并通过to_frame()将结果转换为新列。之后,我将元组分为两个单独的列,分别使用新的DataFrametolist()

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