You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas技术问题:按大小总和对MultIndex(多级索引)排序

解决Pandas分组后按网站总请求数排序多级索引的问题

嘿,这需求不难搞定,我给你一步步拆解:

首先,咱们先把你提供的数据转换成Pandas DataFrame,方便后续操作:

import pandas as pd

# 构建你的示例数据
data = [
    ("website.com", "1.1.1.1"),
    ("website.com", "1.1.1.1"),
    ("website.com", "1.1.1.1"),
    ("website.com", "1.1.1.1"),
    ("website.com", "1.1.1.2"),
    ("website1.com", "1.1.1.1"),
    ("website1.com", "1.1.1.1"),
    ("website1.com", "1.1.1.3"),
    ("website1.com", "1.1.1.3"),
    ("website2.com", "1.1.1.4"),
]

df = pd.DataFrame(data, columns=["website", "ip"])

接下来,按website和ip分组,统计每个组合的请求次数,这时候会自动生成多级索引(MultiIndex):

# 分组并统计每个(网站, IP)组合的请求次数
grouped_counts = df.groupby(["website", "ip"]).size()

现在你需要按「网站的总请求数」来排序这个多级索引,同时每个网站下再按IP的请求数排序。咱们可以先算出每个网站的总请求量,再用它作为排序的核心依据:

# 先计算每个网站的总请求数
website_total = df.groupby("website").size()

# 执行排序:第一优先级是网站总请求数(降序),第二优先级是IP的请求数(降序)
sorted_result = grouped_counts.sort_values(
    key=lambda x: [website_total[x.index.get_level_values(0)], x],
    ascending=[False, False]
)

如果你更习惯看DataFrame格式的结果,可以把它转成带多级索引的DataFrame:

# 转换成DataFrame并重新设置多级索引
sorted_df = sorted_result.reset_index(name="request_count").set_index(["website", "ip"])

运行后,sorted_result的输出会是这样的:

website.com  1.1.1.1    4
             1.1.1.2    1
website1.com 1.1.1.1    2
             1.1.1.3    2
website2.com 1.1.1.4    1
dtype: int64

完全符合你想要的:先按网站的总请求量从多到少排序,每个网站内部再按IP的请求数排序~

内容的提问来源于stack exchange,提问作者pythad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:58:28