- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章pandas数据分组groupby()和统计函数agg()的使用由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
groupby()
方法进行分组size()
查看分组后每组的数量groups
查看分组情况get_group("名字")
根据分组后的名字选择分组数据# 一个Series其实就是一条数据,Series方法的第一个参数是data,第二个参数是index(索引),如果没有传值会使用默认值(0-N)# index参数是我们自定义的索引值,注意:参数值的个数一定要相同。# 在创建Series时数据并不一定要是列表,也可以将一个字典传进去。from pandas import Series, DataFrame# 使用字典创建index_list = ["001", "002", "003", "004", "005", "006", "007", "008", "009", "010"]name_list = ["李白", "王昭君", "诸葛亮", "狄仁杰", "孙尚香", "妲己", "周瑜", "张飞", "王昭君", "大乔"]age_list = [25, 28, 27, 25, 30, 29, 25, 32, 28, 26]gender_list = ["F", "M", "F", "F", "M", "M", "F", "F", "M", "M"]salary_list = ["10k", "12.5k", "20k", "14k", "12k", "17k", "18k", "21k", "22k", "21.5k"]marital_list = ["NO", "NO", "YES", "YES", "NO", "NO", "NO", "YES", "NO", "YES"]dic = { "姓名": Series(data=name_list, index=index_list), "年龄": Series(data=age_list, index=index_list), "薪资": Series(data=salary_list, index=index_list), "性别": Series(data=gender_list, index=index_list), "婚姻状况": Series(data=marital_list, index=index_list)}df = DataFrame(dic)# 写入csv,path_or_buf为写入文本文件df.to_csv(path_or_buf="./People.csv", encoding="utf_8_sig")print("end")
上面代码会在当前目录下生成一个 People.csv 文件 。
import pandas as pddf = pd.read_csv("./People.csv")df.head()
# 根据 "性别列" 进行分组, 得到的是一个分组后的对象groups = df.groupby("性别")print(groups)
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002953DAEBC88>
使用groupby的size方法可以查看分组后每组的数量, 并返回一个含有分组大小的Series 。
print(groups.size())
性别F 5M 5dtype: int64
可以只对一列数据进行分组, 只保留想要的数据 。
例如: 通过性别, 只对年龄进行分组 。
group = df["年龄"].groupby(df["性别"])# 查看分组print(group.groups)# 根据分组后的名字选择分组print(group.get_group("F"))
{"F": Int64Index([0, 2, 3, 6, 7], dtype="int64"), "M": Int64Index([1, 4, 5, 8, 9], dtype="int64")}0 252 273 256 257 32Name: 年龄, dtype: int64
df["年龄"].groupby(df["性别"])
的逻辑是:取出df中"年龄"列数据,并且对该列数据根据df[‘性别"]列数据进行分组操作df.groupby(df["性别"])["年龄"]
, 他的逻辑是: 将df数据通过df[‘性别"]进行分组,然后再取出分组后的"年龄"列数据。两种写法达到的效果是一样的group.groups
的结果是一个字典,字典的key是分组后每个组的名字,对应的值是分组后的数据,此方法方便我们产看分组的情况group.get_group("F")
这个方法可以根据具体分组的名字获取,每个组的数据import pandas as pddf = pd.read_csv("./People.csv")groups = df.groupby("性别")# print(groups)for group_name,group_df in groups: print("分组的名称:", group_name, "分组的数据", group_df.shape) print("-"*10)
分组的名称: F 分组的数据 (5, 6) ---------- 分组的名称: M 分组的数据 (5, 6) ---------- 。
- 将分组后的对象groups进行遍历,可以获取到group_name每个组的名字,group_df每个组的数据 。
import pandas as pddf = pd.read_csv("./People.csv")groups = df.groupby("性别")for group_name,group_df in groups: f_mean = group_df["年龄"].mean() f_max = group_df["年龄"].max() f_min = group_df["年龄"].min() print("{}组的最大年龄是{},最小年龄是{},平均年龄是{}".format(group_name,f_max,f_min,f_mean))
F组的最大年龄是32,最小年龄是25,平均年龄是26.8 M组的最大年龄是30,最小年龄是26,平均年龄是28.2 。
当需要按照多列进行分组的时候, groupby 方法里面我们传入一个列表, 列表分别存储分组依据的列名 。
注意: 列表中列名的顺序, 确定了先按XXXX列分组, 然后在按照YYYY列分组, 不同的顺序产生的分组名字是不同的 。
df = pd.read_csv("./People.csv")group=df.groupby(["性别", "婚姻状况"])df1 = group.size()print(df1)
性别 婚姻状况F NO 2 YES 3M NO 4 YES 1dtype: int64
group.size()返回的结果中发现索引值是多层的, 所以对于多索引值的获取, 只需要从外往里一层一层的取就可以啦, 就像我们睡觉之前,需要先脱外衣再脱掉内衣是一样的 。
size = df1["F"][ "NO"]print(size)
2
count()
统计列表中非空手机开的个数nunique()
统计非重复的数据个数sum()
统计列表中所有数值的和mean()
计算列表中数据的平均值median()
统计列表中数据中位数max()
求列表中数据的最大值min()
求列表中数据的最小值import pandas as pddf = pd.read_csv("./People.csv")groups = df.groupby("性别")for group_name,group_df in groups: f_se = group_df["年龄"].agg(["max","min","mean"]) print("{}组的最大年龄是{},最小年龄是{},平均年龄是{}".format(group_name,f_se[0],f_se[1],f_se[2]))
F组的最大年龄是32.0,最小年龄是25.0,平均年龄是26.8 M组的最大年龄是30.0,最小年龄是26.0,平均年龄是28.2 。
agg()
函数时, 我们可以将多个统计函数一起放在一个 agg() 函数中当使用自定义的统计函数时 先创建统计函数 。
# 自定义的统计函数def my_peak_range(df): """ 返回最大值与最小之间的范围 """ return df.max() - df.min()# 使用for group_name,group_df in groups: f_se = group_df["年龄"].agg(["max","min","mean",my_peak_range]) print(f_se[0],f_se[1],f_se[3])
32.0 25.0 7.030.0 26.0 4.0
注意: 自定义函数名字传入agg() 函数时, 不需要转换成字符串 。
import pandas as pddf = pd.read_csv("./People.csv")groups = df.groupby("性别")gende=groups.sum().sort_values(by="年龄",ascending=False).index.to_list()[0]"""这行代码, 先按性别进行分组, 然后吧每组中的数据求和得到总的年龄, 在按照年龄排序再取出index,最后使用to_list()转换为列表,取出第一个数据"""print(gende)
M 。
开始按照性别分组, 组量太少, 数据也比较少, 本来准备算薪资总数, 但是单位忘记换了, 就这样吧 。
到此这篇关于pandas数据分组groupby()和统计函数agg()的使用的文章就介绍到这了,更多相关pandas groupby()和agg()内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://blog.csdn.net/lxb_wyf/article/details/114266288 。
最后此篇关于pandas数据分组groupby()和统计函数agg()的使用的文章就讲到这里了,如果你想了解更多关于pandas数据分组groupby()和统计函数agg()的使用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
给定输入: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 将数字按奇数或偶数分组,然后按小于或大于 5 分组。 预期输出: [[1, 3, 5], [2, 4], [6, 8, 10
编辑: @coldspeed、@wen-ben、@ALollz 指出了我在字符串 np.nan 中犯的新手错误。答案很好,所以我不删除这个问题来保留那些答案。 原文: 我读过这个问题/答案 What'
我试图概括我提出的问题 here . mlb 数据框看起来像 Player Position Salary Year 0 Mike Wit
我认为我不需要共享整个数据框,但基本上,这是有问题的代码行(当然,已经导入了 pandas) divstack = df[df['Competitor']=='Emma Slabach'].group
我面临下一个问题:我有组(按 ID),对于所有这些组,我需要应用以下代码:如果组内位置之间的距离在 3 米以内,则需要将它们添加在一起,因此将创建一个新组(代码如何创建我在下面显示的组)。现在,我想要
我有以下数据: ,dateTime,magnitude,occurrence,dateTime_s 1,2017-11-20 08:00:09.052260,12861,1,2017-11-20 08
我按感兴趣的列对 df 进行分组: grouped = df.groupby('columnA') 现在我只想保留至少有 5 名成员的组: grouped.filter(lambda x: len(x
数据是一个时间序列,许多成员 ID 与许多类别相关联: data_df = pd.DataFrame({'Date': ['2018-09-14 00:00:22',
选择 u.UM_TOKEN_NO 、u.UM_FULLNAME、u.SECTOR、u.department_name、t.TS_PROJECT_CODE、sum(t.TS_TOTAL_HRS) 来自
我有这两个表: +---------------+-------------+---------------------+----------+---------+ | items_ordered |
我正在使用 groupby 和 sum 快速汇总两个数据集 一个包含: sequence shares 1 100 2 200 3 50 1 2
这个问题在这里已经有了答案: list around groupby results in empty groups (3 个答案) itertools groupby object not out
我有一组行,我想按标识符的值进行分组 - 存在于每一行中 - 然后对将作为结果的组进行进一步的隔离处理。 我的数据框是这样的: In [50]: df Out[50]: groupkey b
假设您要在全局范围内销售产品,并且希望在某个主要城市的某个地方设立销售办事处。您的决定将完全基于销售数字。 这将是您的(简化的)销售数据: df={ 'Product':'Chair', 'Count
我有一个将数据分组两次的查询: var query = (from a in Context.SetA() from b in Context.SetB().Where(x => x.aId == a
我有一个这种格式的数据框: value identifier 2007-01-01 0.087085 55 2007-01-01 0.703249
这个问题在这里已经有了答案: python groupby behaviour? (3 个答案) 关闭 4 年前。 我有一个这样的列表 [u'201003', u'200403', u'200803
在 Python 中,我可以使用 itertools.groupby 将具有相同键的连续元素分组。 : >>> items = [(1, 2), (1, 5), (1, 3), (2, 9), (3,
无法翻译以下 GroupBy 查询并将引发错误:不支持客户端 GroupBy IEnumerable ids = new List { 1, 2, 3 }; var q = db.Comments.W
考虑一个 Spark DataFrame,其中只有很少的列。目标是对其执行 groupBy 操作,而不将其转换为 Pandas DataFrame。等效的 Pandas groupBy 代码如下所示:
我是一名优秀的程序员,十分优秀!