【问题标题】:Python PANDAS: Groupby Transform Sum UniquePython PANDAS:Groupby 变换求和唯一
【发布时间】:2018-11-09 17:27:25
【问题描述】:

我有一种情况,我在 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

对于无法提供任何虚拟数据,我深表歉意,但如果我希望提供足够的详细信息来推理,我将不胜感激。

【问题讨论】:

    标签: python pandas numpy pandas-groupby


    【解决方案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())
    

    sets 和 sums 的替代解决方案:

    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
    

    【讨论】:

    • 哇,非常感谢您这么快的洞察力!啊,我现在明白我的错误了。我最初尝试过 .transform(lambda x: sum(x.unique())) 。一如既往的感谢。
    猜你喜欢
    • 2018-06-15
    • 2013-10-23
    • 2017-06-01
    • 2012-05-02
    • 2020-08-20
    • 1970-01-01
    • 2020-09-02
    • 2017-01-18
    • 1970-01-01
    相关资源
    最近更新 更多