我有一个类似
的数据框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
我知道如何进行分组,但是不确定如何计算多行并将行转换为列以获取计数。
答案 0 :(得分:2)
可能不是最有效的方法,但也许仍然有帮助:-)
我通过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