按多列分组,并对熊猫中其他列的值进行透视和计数

时间:2019-11-15 10:27:04

标签: python pandas

我有一个数据框

   city   skills   priority acknowledge id_count  acknowledge_count
    ABC    XXX       High      Yes         11         2
    ABC    XXX       High       No         10         3
    ABC    XXX       Med       Yes          5         1
    ABC    YYY       Low        No          1         5

我想按城市和技能分组,并从 id_count 列中获取total_id_count,从 priority 中将其分为三个单独的列,分别为high.med,low。 与total_acknowledge_count类似,请确认

需要的输出:

                  total_id_count      total_acknowledege_count
city,skills    High   Med   Low         Yes      No
ABC,XXX        22      5     0           3        3                # 22=11+10    3=(2+1)
ABC,YYY        0       0     1           0        5

我正在尝试不同的方法,例如数据透视表,groupby和stack,但这似乎很困难。

有什么办法可以达到这个结果?

1 个答案:

答案 0 :(得分:1)

在这里,您需要分别针对total_id_counttotal_acknowledege_count进行数据透视,因为您有两种用于聚合的单独的column / value方案:

piv1 = df.pivot_table(index=['city', 'skills'], columns='priority', 
                      values='id_count', aggfunc='sum', fill_value=0)
piv2 = df.pivot_table(index=['city', 'skills'], columns='acknowledge', 
                      values='acknowledge_count', aggfunc='sum', fill_value=0)

piv1.columns = pd.MultiIndex.from_product([['id_count'], piv1.columns])
piv2.columns = pd.MultiIndex.from_product([['acknowledge_count'], piv2.columns])

output = pd.concat([piv1, piv2], axis=1)

print(output)

                  id_count  acknowledge_count    
                High Low Med     No Yes
city skills                                       
ABC  XXX          21   0   5     3   3
     YYY           0   1   0     5   0
相关问题