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

本文介绍了如何使用Pandas库进行数据处理,包括对年龄进行累加、按照多个条件分组累加、按性别对年龄进行等级排序以及在排序后分组累计求和。示例代码详细展示了`cumsum()`和`rank()`函数的用法,强调了排序和分组在数据处理中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、生成一列sum_age 对age 进行累加

df['sum_age'] = df['age'].cumsum()
print(df)

二、生成一列sum_age_new 按照 gender和is_good 对age进行累加

df['sum_age_new'] = df.groupby(['gender','is_good'])['age'].cumsum()
print(df)

 

三、根据不同的性别对年龄进行 等级 排序

df['rank_g'] = df.groupby(['gender'])['age'].rank()
print(df)

这里的 rank( ) 即 'rank_g' ,并不是按照1、2、3、4、、依次排

按照官方文档的意思,该函数是沿着某个轴来计算数值数据等级(1到n)。默认情况下,为相等的值分配同一个等级,该等级是这些值的等级的平均值。

例子:

import pandas as pd
obj = pd.Series([7,-5,7,4,2,0,4])
print(obj.rank())

代码对 [7, -5, 7, 4, 2, 0, 4] 进行从小到大地排序,很明显地,可以排成 [-5, 0, 2 ,4, 4, 7, 7],数值7有第6和第7两个位置,那应该排序应该排到第几级?根据官方文档,取平均值,(6+7)/2=6.5,所以两个7的等级都为6.5,同理可得两个4的等级都为(4+5)/2=4.5。

输出:

0    6.5
1    1.0
2    6.5
3    4.5
4    3.0
5    2.0
6    4.5
dtype: float64

四、对数据排序之后,分组,并累计求和

# 对Start Time进行排序,Connection Type分组,temp进行累计求和cumsum
wsw_1 = wsw.sort_values(['Start Time'])
wsw_1.loc[:, 'Connection Number'] = wsw_1.groupby(['Connection Type'])['temp'].cumsum()

这里如果不对start time排序,Connection Number不会按时间顺序,统计drilling、tripping 的number数

参考:

python中分组排序--groupby(),rank()_baidu_38409988的博客-优快云博客

https://www.zhihu.com/question/66136235/answer/1172712720

在数据分析过程中,经常需要对分组后的数据进行累加求和以及计算各组内数据的平均比例。要实现这一目标,我们可以利用Pandas库提供的`groupby`和`cumsum`等函数。具体步骤如下: 参考资源链接:[Python分组求和与累加示例:数据处理与统计](https://wenku.youkuaiyun.com/doc/645cdbc095996c03ac3fa413) 首先,确保你已经安装了Pandas库,如果还未安装,请使用以下命令进行安装: ```python pip install pandas ``` 接下来,我们可以根据给定的数据集创建一个DataFrame,并按照某一列进行分组,然后对另一列数据进行累加求和操作。例如: ```python import pandas as pd # 创建数据集 data = {'name': ['abc', 'abc', 'abc', 'asc', 'ase', 'ase', 'ase'], 'num': [1, 2, 2, 1, 2, 1, 2]} df1 = pd.DataFrame(data) # 按'name'列分组,并对'num'列进行累加求和 df_grouped = df1.groupby('name')['num'].cumsum().reset_index(name='cumulative_sum') # 计算每个分组的平均比例 # 假设我们需要计算每个分组中数值1的平均比例,可以使用以下代码: df_grouped['avg_ratio'] = df_grouped['cumulative_sum'] / df_grouped.groupby('name')['num'].transform('sum') print(df_grouped) ``` 在这个例子中,我们首先对数据集按照`name`列进行分组,然后使用`cumsum()`函数对每个组内的`num`列进行累加求和。接着,我们使用`transform('sum')`函数计算每个组内`num`的总和,并将这个总和用于计算平均比例。`avg_ratio`列显示了每个分组中累加和占该组总数的比例。 这样,我们就完成了分组累加求和以及平均比例的计算。这些操作对于数据清洗、统计分析以及生成报表都是非常有用的。 想要深入了解Pandas进行数据分组、累加求和以及其他高级功能,推荐阅读《Python分组求和与累加示例:数据处理与统计》。这本书提供了丰富的示例和技巧,帮助你掌握Pandas在数据分析中的应用,实现从基础到高级的各种操作。 参考资源链接:[Python分组求和与累加示例:数据处理与统计](https://wenku.youkuaiyun.com/doc/645cdbc095996c03ac3fa413)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

种麦南山下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值