今晚突然想到一个需求,有一个清单,上面有每个社部每个客户的开庭日期,我想把它汇总起来,跟数据透视表差不多,每个社部为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("-")