我有一种情况,我在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
我很抱歉无法提供任何虚假数据,但如果我希望提供足够的详细信息,我将不胜感激。
答案 0 :(得分:1)
我认为需要unique
和sum
的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())
set
和sum
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