python 实现分组求和与分组累加求和代码

我就废话不多说了,大家还是直接看代码吧!

# -*- encoding=utf-8 -*-
import pandas as pd
data=['abc','abc','abc','asc','ase','ase','ase']
num=[1,2,2,1,2,1,2]
df1=pd.DataFrame({'name':data,'num':num})
print(df1)

df1['mmm']=df1['num']
df2=df1.groupby(['name', 'num'], as_index=False).count()
print(df2)
df2.sort_values(['name', 'num'], ascending=[1, 1], inplace=True)
print(df2)
df2['sum']=df2.groupby(['name'])['mmm'].cumsum()
print(df2)
kk=df2.groupby(['name'],as_index=False)['num'].sum()
print(kk)
df3 = pd.merge(df2, kk, on='name', how='left',)
print(df3)
df3['ratio']=df3['sum']/df3['num_y']
df3.columns = ['name', 'num', 'mmm', 'sum','numsum','ratio']
print(df3)
df4=df3.groupby(['mmm'],as_index=False)['ratio'].mean()

print(df4)

运行:

 name num
0 abc  1
1 abc  2
2 abc  2
3 asc  1
4 ase  2
5 ase  1
6 ase  2
 name num mmm
0 abc  1  1
1 abc  2  2
2 asc  1  1
3 ase  1  1
4 ase  2  2
 name num mmm
0 abc  1  1
1 abc  2  2
2 asc  1  1
3 ase  1  1
4 ase  2  2
 name num mmm sum
0 abc  1  1  1
1 abc  2  2  3
2 asc  1  1  1
3 ase  1  1  1
4 ase  2  2  3
 name num
0 abc  3
1 asc  1
2 ase  3
 name num_x mmm sum num_y
0 abc   1  1  1   3
1 abc   2  2  3   3
2 asc   1  1  1   1
3 ase   1  1  1   3
4 ase   2  2  3   3
 name num mmm sum numsum   ratio
0 abc  1  1  1    3 0.333333
1 abc  2  2  3    3 1.000000
2 asc  1  1  1    1 1.000000
3 ase  1  1  1    3 0.333333
4 ase  2  2  3    3 1.000000
  mmm   ratio
0  1 0.555556
1  2 1.000000

Process finished with exit code 0

补充知识:python项目篇-对符合条件的某个字段进行求和,聚合函数annotate(),aggregate()函数

对符合条件的某个字段求和

需求是,计算每日的收入和

1、

 new_dayincome = request.POST.get("dayincome_time", None)

    # total_income = models.bathAccount.objects.filter(dayBath=new_dayincome).aggregate(nums=Sum('priceBath'))
    total_income = models.bathAccount.objects.values('priceBath').annotate(nums=Sum('priceBath')).filter(dayBath=new_dayincome)
    print("total_income",total_income[0]['nums'])

输出结果:total_income 132

2、

from django.db.models import Sum,Count
new_dayincome = request.POST.get("dayincome_time", None)

    total_income = models.bathAccount.objects.filter(dayBath=new_dayincome).aggregate(nums=Sum('priceBath'))
    print("total_income",total_income['nums'])

输出结果:total_income 572

第二种输出的是正确的数字

以上这篇python 实现分组求和与分组累加求和代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python用for循环求和的方法总结

    Python中可以使用for循环实现累加求和 for循环语法: for 变量 in range(x): 循环需要执行的代码 如下实现1到n求和: def main(): sum = 0 # 定义变量做累加器 n = int(input('n=')) #从键盘上输入累加的范围 for x in range(n): sum += (x + 1) print(sum) if __name__ == '__main__': main() 用for循环实现1~n求和的方法 def main():   su

  • Python DataFrame.groupby()聚合函数,分组级运算

    pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片.切块.摘要等操作.根据一个或多个键(可以是函数.数组或DataFrame列名)拆分pandas对象.计算分组摘要统计,如计数.平均值.标准差,或用户自定义函数.对DataFrame的列应用各种各样的函数.应用组内转换或其他运算,如规格化.线性回归.排名或选取子集等.计算透视表或交叉表.执行分位数分析以及其他分组分析. groupby分组函数: 返回值:返回重构格式的DataFrame,特别注意,grou

  • 基于Python中求和函数sum的用法详解

    基于Python中求和函数sum的用法详解 今天在看<集体编程智慧>这本书的时候,看到一段Python代码,当时是百思不得其解,总觉得是书中排版出错了,后来去了解了一下sum的用法,看了一些Python大神写的代码后才发现是自己浅薄了!特在此记录一下.书中代码段摘录如下: from math import sqrt def sim_distance(prefs, person1, person2): # 得到shared_items的列表 si = {} for item in prefs[p

  • 浅谈python累加求和+奇偶数求和_break_continue

    如下所示: # 计算0到100之间的之间所有的数字累计求和结果 # 定义最终结果的变量 result = 0 # 定义一个整数的变量来记录循环次数 i = 0 # 开始循环 while i <= 100: print(i) # 每一次循环都让 result 和 i 这个变量相加 # 处理计数器 result += i # result = i + result i += 1 print("1~100的计算结果等于%d"%result) 首先定义一个变量,result来记录相加的最

  • python 实现分组求和与分组累加求和代码

    我就废话不多说了,大家还是直接看代码吧! # -*- encoding=utf-8 -*- import pandas as pd data=['abc','abc','abc','asc','ase','ase','ase'] num=[1,2,2,1,2,1,2] df1=pd.DataFrame({'name':data,'num':num}) print(df1) df1['mmm']=df1['num'] df2=df1.groupby(['name', 'num'], as_inde

  • pandas的排序、分组groupby及cumsum累计求和方式

    目录 生成一列sum_age 对age 进行累加 生成一列sum_age_new 按照 gender和is_good 对age进行累加 根据不同的性别对年龄进行 等级 排序 对数据排序之后,分组,并累计求和 pandas分组排序功能 生成一列sum_age 对age 进行累加 df['sum_age'] = df['age'].cumsum() print(df) 生成一列sum_age_new 按照 gender和is_good 对age进行累加 df['sum_age_new'] = df.

  • 利用Python/R语言分别解决金字塔数求和问题

    目录 前言 1.前N阶乘求和 1.1 图解问题 1.2 算法流程 1.3 代码实现 1.4实验小结 2.金字塔数求和运算 2.1 图解问题 2.2 算法流程 2.3 代码实现 2.4 实验小结 总结 前言 此专栏为python与R语言对比学习的文章:以通俗易懂的小实验,带领大家深入浅出的理解两种语言的基本语法,并用以实际场景!感谢大家的关注,希望对大家有所帮助. “博观而约取,厚积而薄发!”谨以此言,望诸君共勉 本文将前两个小实验整理拼凑再了一起 :分别是“前N阶乘求和.金字塔数求和”.具体的项

  • 详解python里使用正则表达式的分组命名方式

    详解python里使用正则表达式的分组命名方式 分组匹配的模式,可以通过groups()来全部访问匹配的元组,也可以通过group()函数来按分组方式来访问,但是这里只能通过数字索引来访问,如果某一天产品经理需要修改需求,让你在它们之中添加一个分组,这样一来,就会导致匹配的数组的索引的变化,作为开发人员的你,必须得一行一行代码地修改.因此聪明的开发人员又想到一个好方法,把这些分组进行命名,只需要对名称进行访问分组,不通过索引来访问了,就可以避免这个问题.那么怎么样来命名呢?可以采用(?P<nam

  • python对excel文档去重及求和的实例

    废话不多说,估计只有我这个菜鸟废了2个小时才搞出来,主要是我想了太多方法来实现,最后都因为这因为那的原因失败了 间接说明自己对可变与不可变类型的了解,还是不够透彻 最后就用了个笨方法解决了! #coding:utf-8 import xlrd import xlwt import os from collections import Counter workbook = xlrd.open_workbook(r'D:\hh\heli\a.xlsx') Sheet1 = workbook.shee

  • python 用for循环实现1~n求和的实例

    用for循环实现1~n求和的方法 def main(): sum = 0 n = int(input('n=')) for x in range(n): sum += (x + 1) print(sum) if __name__ == '__main__': main() 以上这篇python 用for循环实现1~n求和的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Java lambda 循环累加求和代码

    java 8 stream 提供了下面几种类型的求和 Stream::mapToInt Stream::mapToDouble Stream::mapToLong public void test() { List<Person> people = new ArrayList<>(); people.add(new Person("zhangsan",20)); people.add(new Person("lisi", 26)); peop

  • C语言规律循环累加求和案例

    我就废话不多说了,大家还是直接看代码吧~ #include <stdio.h> void main(){ int i; float a,b,c,d,t; a = 1.0; b = 2.0; i = 1; t = 0; for (i = 1; i <= 20; i++) { if (i < 2){ c = b / a; t = c+t; a = a + 1; b = b + 1; //第一项不符合规律 } else { c = b / a; t = t + c; d = a; a =

  • python3批量删除豆瓣分组下的好友的实现代码

    python3批量删除豆瓣分组下的好友的实现代码 """ python3批量删除豆瓣分组下的好友 2016年6月7日 03:43:42 codegay 我两年前一时冲动在豆瓣关注了很多豆瓣的员工,好多,有四百个. 我现在一时冲动想取消关注...,写这么一个脚本可以用来加快删除的速度. cookies还是直接从chrome读取出来用, 参考我之前刚写的代码 python3从chrome浏览器读取cookie, """ import os impor

随机推荐