微前端架构如何改变企业的开发模式与效率提升
955
2022-10-08
PyPackage01---Pandas04_实现SQL中分组排序
hive中经常会用到row_number这个函数,比如取用户第n次购买,前n次购买记录等等。那么python中如何实现呢?直接看个例子即可
下面是a、b两个用户购买的记录,user为用户名,amount为消费金额,要去按照user分组,组内按照amount降序排序,并且新增一列标识序号
import pandas as pddf = pd.DataFrame({'user':['a','a','a','b','b'],'amount':[11,11,31,32,42]})
user | amount | |
0 | a | 11 |
1 | a | 11 |
2 | a | 31 |
3 | b | 32 |
4 | b | 42 |
法一
import pandas as pddef row_number(df, groupbyKey, rankCol, ascending=False): def sub_row_number(df, rankCol, ascending=False): """ df:数据框 rankCol:为需要对之排序的列 istopn:返回每一组的第n行数据 """ count = len(df) temp_data = df.sort_values(by=rankCol, ascending=ascending) temp_data['row'] = range(len(df)) return temp_data result = df.groupby([groupbyKey]).apply(sub_row_number, rankCol=rankCol, ascending=ascending) result.index = range(len(result)) return
row_number(df, groupbyKey='user',rankCol="amount",ascending=True)
user | amount | row | |
0 | a | 11 | 0 |
1 | a | 11 | 1 |
2 | a | 31 | 2 |
3 | b | 32 | 0 |
4 | b | 42 | 1 |
法二
def row_number(df, groupbyKey, rankCol, ascending=True): df["rw"] = df.groupby(groupbyKey)[rankCol].rank(method ="first",ascending=ascending ) return
row_number(df, groupbyKey='user',rankCol="amount",ascending=False)
user | amount | rw | |
0 | a | 11 | 2.0 |
1 | a | 11 | 3.0 |
2 | a | 31 | 1.0 |
3 | b | 32 | 2.0 |
4 | b | 42 | 1.0 |
2018-12-105 于南京市栖霞区紫东创业园
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~