如何分组列并找到唯一行然后在pandas中应用sum()

时间:2017-08-02 08:01:59

标签: python pandas

我有一个数据框:

 Title     Product    No     Type
   A         Mo       3       Sky
   A         Mo       3       Sky
   A         Mo       3       Sky
   A         Md       2       Sky
   A         Md       3       Sky
   A         Md       2       Sky
   A         Md       6       Land
   A         Md       6       Land
   A         Md       6       Land
   A         Mo       5       Land
   A         Mo       5       Land

我希望有一个卷列,该列是No,但是groupby Type列的总和,然后只找到唯一的行并总结,下面是我的预期结果:

 Title     Product    No     Type      Sum
   A         Mo       3       Sky       8
   A         Mo       3       Sky       8
   A         Mo       3       Sky       8
   A         Md       2       Sky       8
   A         Md       2       Sky       8
   A         Md       2       Sky       8
   A         Md       6       Land      11
   A         Md       6       Land      11
   A         Md       6       Land      11
   A         Mo       5       Land      11
   A         Mo       5       Land      11

我尝试运行下面的代码,但是我收到错误无法访问'DataFrameGroupBy'对象的可调用属性'groupby',请尝试使用'apply'方法

代码:

      FamilyVsM['Sum']=(FamilyVsM.groupby(['Type']).groupby(['Title','Product'])['No'].transform(lambda x: np.unique(x).sum()))  

2 个答案:

答案 0 :(得分:3)

IIUIC,你需要做

DoCmd.SetWarnings False

答案 1 :(得分:0)

这不是一个行代码,但它可能有效

# First, group by 'Type' and sum 'No'
df_group = df.groupby(['Type'], as_index=False)['No'].sum().rename(columns={'No': 'Sum'})

# Second, merge by 'Type'
df.merge(df_group, how='left', left_on='Type', right_on='Type')