Pandas:基于多条件聚合客户交易数据的解决方案咨询
方案1:使用agg直接多聚合(推荐,改动最小)
你只需要把groupby的参数改成要分组的多字段列表,再用agg方法同时执行求和、计数两个聚合操作即可,写法和你现有代码的逻辑完全兼容:
Combined = data.groupby(["ID", "Year", "Month"])["Amount"].agg( Sum="sum", Count="count" ).reset_index()
运行后输出的结果会包含ID、Year、Month、Sum(对应分组交易总金额)、Count(对应分组交易笔数)5个字段。
方案2:命名聚合写法(可读性更强)
如果后续你需要对不同字段做不同的聚合规则,推荐用pandas 0.25+支持的命名聚合语法,逻辑更清晰:
Combined = data.groupby(["ID", "Year", "Month"]).agg( Sum=("Amount", "sum"), Count=("Amount", "count") ).reset_index()
方案3:旧版本pandas兼容写法
如果你用的pandas版本低于0.25不支持命名聚合,可以先聚合再手动重命名列:
Combined = data.groupby(["ID", "Year", "Month"])["Amount"].agg(["sum", "count"]).reset_index() # 手动重命名列 Combined.columns = ["ID", "Year", "Month", "Sum", "Count"]
如果需要调整分组的排序规则,只要调整groupby参数里的字段顺序即可,比如要按「年份→月份→客户ID」的层级分组,就把参数改成["Year", "Month", "ID"]。
内容的提问来源于stack exchange,提问作者Iva
相关产品推荐
相关产品推荐

