如何在Pandas DataFrame中获取各街区组sum最高的room_type
实现思路与代码示例
假设你用Pandas处理数据,下面两种方法都能帮你筛选出每个街区组中sum值最高的房型:
方法一:用transform获取组内最大值后筛选
如果你已经通过groupby得到了包含neighborhood_group、room_type和对应sum_value的聚合表(比如叫agg_df),可以这么做:
# 给每行添加对应街区组的sum最大值 agg_df['group_max_sum'] = agg_df.groupby('neighborhood_group')['sum_value'].transform('max') # 只保留sum值等于组内最大值的行,最后删掉辅助列 final_result = agg_df[agg_df['sum_value'] == agg_df['group_max_sum']].drop('group_max_sum', axis=1)
transform的作用是把每个街区组的最大值广播到该组的所有行,这样就能直接和每行的sum_value对比筛选。如果同一个街区组有多个房型sum值并列第一,这个方法会把它们都保留下来。
方法二:用rank排名后筛选
这种方法通过给每个街区组内的sum值排名,直接取排名第一的行:
# 按街区组分组,给sum_value降序排名(rank=1就是最大的) agg_df['sum_rank'] = agg_df.groupby('neighborhood_group')['sum_value'].rank(ascending=False, method='first') # 筛选排名为1的行,删掉辅助列 final_result = agg_df[agg_df['sum_rank'] == 1].drop('sum_rank', axis=1)
这里的method='first'是指如果有相同的sum值,取最先出现的那一行;如果想保留所有并列第一的,把method改成'min'即可。
如果你的原始数据还没做聚合,得先执行这一步:
# 先按街区组和房型分组,计算sum值 agg_df = original_df.groupby(['neighborhood_group', 'room_type'])['目标列'].sum().reset_index(name='sum_value')
把上面的目标列替换成你要计算sum的列名就行。
内容的提问来源于stack exchange,提问作者Wessel Muntendam
相关产品推荐
相关产品推荐

