Python用Groupby与筛选按供应商分组统计逾期付款总和并新增列
实现代码
可以通过一行代码完成需求,补全内容如下:
df['Paid Late by Vendor'] = df.groupby('供应商')['账单金额'].transform(lambda s: s[df.loc[s.index, '付款类型'] == '逾期'].sum())
如果想要代码可读性更强,也可以用下面的写法,逻辑完全等价:
df['Paid Late by Vendor'] = df.assign(逾期临时额=lambda x: x['账单金额'].where(x['付款类型'] == '逾期', 0)).groupby('供应商')['逾期临时额'].transform('sum')
说明
- 以上代码默认
付款类型字段中,逾期付款的取值为逾期,如果你的实际业务中该字段的逾期取值是其他内容(比如已逾期/Late),替换代码中判断条件的对应值即可 - 这里用
transform而非普通的sum聚合,是为了保证分组求和后的结果和原DataFrame行数完全对齐,自动匹配到对应供应商的所有行,不需要额外做拼接操作
内容的提问来源于stack exchange,提问作者Prasanna
相关产品推荐
相关产品推荐

