数据表分组后对某列的字符串拼接

今晚突然想到一个需求,有一个清单,上面有每个社部每个客户的开庭日期,我想把它汇总起来,跟数据透视表差不多,每个社部为index,日期为columns,values为汇总的客户名称,每个客户名称用分隔符分隔,感觉用excel挺难实现的,直接用pandas吧,以下为模拟:

df=pd.DataFrame([["a","bbao",3,"2021-01-02"],["a","cbao",4,"2021-01-02"],["b","bcao",5,"2021-01-03"],
                  ["b","ccao",6,"2021-01-04"]],columns=["社部","姓名","数量","日期"])

生成一个DataFrame

  社部    姓名          日期
0  a  bbao  2021-01-02
1  a  cbao  2021-01-02
2  b  bcao  2021-01-03
3  b  ccao  2021-01-04

按社部和日期分组,对姓名列应用拼接函数,然后拆解二级索引,最后把空值用"-"填充。

dg=df.groupby(["社部","日期"]).agg({"姓名":lambda x:"/".join(x)}).unstack().fillna("-")

日期 2021-01-02 2021-01-03 2021-01-04
社部                                 
a   bbao/cbao          -          -
b           -       bcao       ccao

以前以为agg一般用于执行统计的函数,其实还可以用于匿名函数,功能还是挺强大的。
其实直接用pivot_table也可以直接实现这个需求。

dp=df.pivot_table(index="社部",columns="日期",values="姓名",aggfunc=lambda x:"/".join(x)).fillna("-")
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容