Python PANDAS:Groupby Transform Sum Unique

时间:2018-05-30 19:02:29

标签: python pandas numpy pandas-groupby

我有一种情况,我在PANDAS中创建一个数据透视表,分别计算字段更有意义,只需使用.pivot_table()进行透视步骤。但是,我遇到了一些困难的尝试计算我的百分比的分母。基本上,由于数据格式,我似乎需要在下面的第二行(这是我被卡住的地方)做一些类似“groupby变换唯一和”的事情:

df['numerator'] = df.groupby(['category1','category2'])['customer_id'].transform('nunique')
df['denominator'] =  df.groupby(['category2'])['numerator'].nunique().transform('sum')
df['percentage'] = (df['numerator'] / df['denominator'])

df_pivot  = df.pivot_table(index='category1',
                           columns=['category2'],
                           values=['numerator','percentage']) \
                           swaplevel(0,1,axis=1)

df_pivot.loc['total', :] = df_pivot.sum().values

我很抱歉无法提供任何虚假数据,但如果我希望提供足够的详细信息,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

我认为需要uniquesum的lambda函数:

df = pd.DataFrame({'numerator':[3,1,1,9,2,2],
                   'category2':list('aaabbb')})

#print (df)

df['denominator']=df.groupby(['category2'])['numerator'].transform(lambda x: x.unique().sum())

setsum s的替代解决方案:

df['denominator']=df.groupby(['category2'])['numerator'].transform(lambda x: sum(set(x)))
print (df)
  category2  numerator  denominator
0         a          3            4
1         a          1            4
2         a          1            4
3         b          9           11
4         b          2           11
5         b          2           11