Python PANDAS: Groupby Transform Sum Уникальный - PullRequest
0 голосов
/ 30 мая 2018

У меня есть ситуация, когда я создаю сводную таблицу в PANDAS, где имеет смысл вычислять поля отдельно и просто использовать .pivot_table () для шага сводки.Однако я сталкиваюсь с некоторыми трудностями, пытаясь вычислить знаменатель для моих процентов.По сути, из-за формата данных мне кажется, что мне нужно сделать что-то вроде «groupby transform unique sum» во второй строке ниже (вот где я застрял):

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 голосов
/ 30 мая 2018

Мне кажется, нужна лямбда-функция с unique и sum:

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 с:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...