python pandas实现partition by组内排序功能

不需要排名列直接得出每门科目前2名数据: 

import pandas as pd
import numpy as np
dic={'科目':['语文','语文','语文','语文','数学','数学','数学','数学','英语','英语','英语','英语'],
         '姓名':['赵大','钱二','孙三','李四','周五','郑六','王七','朱八','小红','小明','小李','小王'],
         '分数':[95,84,93,88,91,93,84,85,94,93,83,87]}
data=pd.DataFrame(dic)#转为DataFrame
data=data.sort_values('分数', ascending = False)
data_select = data.groupby('科目').head(2).sort_values('科目')

需要排名列:

import pandas as pd
import numpy as np
dic={'科目':['语文','语文','语文','语文','数学','数学','数学','数学','英语','英语','英语','英语'],
         '姓名':['赵大','钱二','孙三','李四','周五','郑六','王七','朱八','小红','小明','小李','小王'],
         '分数':[95,84,93,88,91,93,84,85,94,93,83,87]}
data=pd.DataFrame(dic)#转为DataFrame
data['rank'] = data.groupby('科目')['分数'].rank(ascending = False)
data_select=data[data['rank']<=2]

 

如果对你有帮助,请点下赞,予人玫瑰手有余香!

时时仰望天空,理想就会离现实越来越近!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Pandas 提供了一组函数,可以在分组后对数据进行聚合。 要使用这些函数,需要使用 `groupby()` 函数对数据进行分组。例如,如果要根据 "State" 列对数据进行分组,可以使用以下代码: ``` df.groupby("State") ``` 分组后,可以使用聚合函数(如 `mean()`、`max()`、`min()` 等)来计算分组数据的统计信息。例如,要计算每个州的平均销售额,可以使用以下代码: ``` df.groupby("State")["Sales"].mean() ``` 要计算每个州的最大销售额,可以使用以下代码: ``` df.groupby("State")["Sales"].max() ``` 要根据多个列进行分组,可以将多个列名放在一个列表中,并传递给 `groupby()` 函数。例如,要根据 "State" 和 "Region" 列进行分组,可以使用以下代码: ``` df.groupby(["State", "Region"]) ``` 请注意,`groupby()` 函数返回的是一个分组对象,而不是分组后的数据。要获取分组后的数据,需要在分组对象上使用聚合函数(如 `mean()`、`max()`、`min()` 等)。 有关分组和聚合的更多信息,请参阅 Pandas 文档:https://pandas. ### 回答2: 要实现类似于SQL中的over partition by功能,可以使用pandas的groupby和transform方法。 在pandas中,groupby方法可以根据指定的列对数据进行分组,transform方法可以对每个分组应用计算函数,并将结果返回到原始数据中。 假设有一个包含多个用户行为数据的DataFrame,其中包括用户ID(user_id)、行为类型(action_type)和行为时长(action_duration)等列。我们希望对每个用户ID进行分组,并计算每个用户的平均行为时长和总行为时长。可以按照以下步骤实现: 1. 导入pandas库并读取数据到DataFrame中。 2. 使用groupby方法按照用户ID进行分组。 3. 使用transform方法对行为时长列进行平均和求和计算。 4. 将计算结果保存到新的列中。 示例代码如下: ```python import pandas as pd # 读取数据到DataFrame df = pd.read_csv('data.csv') # 使用groupby和transform计算每个用户的平均行为时长和总行为时长 df['avg_duration'] = df.groupby('user_id')['action_duration'].transform('mean') df['total_duration'] = df.groupby('user_id')['action_duration'].transform('sum') # 输出结果 print(df) ``` 通过上述代码,我们可以获得一个新的DataFrame,其中包含了每个用户的平均行为时长和总行为时长。这样就实现了类似于SQL中的over partition by功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值