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

使用Pandas按GRP分组统计DataFrame多HOST列元素出现次数

嘿,这需求用pandas就能轻松搞定!我给你一步步拆解实现:

实现思路

核心就是把宽格式的HOST列转成长格式,再按分组统计次数,分两步走:

  1. 把HOST1、HOST2、HOST3三列“堆叠”成一列,保留GRP分组信息
  2. 按GRP和HOST组合分组,统计每个主机在对应分组里的出现次数
完整代码示例

首先我们先构造你的示例数据,然后执行处理逻辑:

import pandas as pd

# 构造示例DataFrame
data = {
    'GRP': [0,1,1,1,1,2,2,2],
    'HOST1': ['srv39','srv102','srv101','srv101','srv36','srv100','srv100','srv38'],
    'HOST2': ['srv45','srv36','srv36','srv34','srv49','srv47','srv45','srv49'],
    'HOST3': ['srv47','srv38','srv45','srv45','srv50','srv48','srv49','srv47'],
    'FILESIZE': [203498176,452763956,453277268,448174741,452728577,454617541,454617541,454617541]
}
df = pd.DataFrame(data)

# 步骤1:宽表转长表,把三个HOST列合并成一列
long_df = df.melt(
    id_vars='GRP',  # 保留分组列
    value_vars=['HOST1', 'HOST2', 'HOST3'],  # 需要堆叠的列
    value_name='HOST'  # 堆叠后的列名
)

# 步骤2:分组统计次数
result = long_df.groupby(['GRP', 'HOST']).size().reset_index(name='count')

# 查看最终结果
print(result)
输出结果

运行后你会得到如下格式的统计结果:

GRP    HOST  count
0    0   srv39      1
1    0   srv45      1
2    0   srv47      1
3    1   srv101     2
4    1   srv102     1
5    1   srv34      1
6    1   srv36      3
7    1   srv38      1
8    1   srv45      2
9    1   srv49      1
10   1   srv50      1
11   2   srv100     2
12   2   srv38      1
13   2   srv45      1
14   2   srv47      2
15   2   srv48      1
16   2   srv49      3
关键步骤解释
  • melt函数:这是pandas处理宽表转长表的核心工具,它帮我们把分散在三列的HOST信息合并到一列,同时保留每个HOST对应的GRP分组。
  • groupby(...).size():按GRP和HOST的组合分组后,size()会自动计算每组的行数,也就是该主机在对应分组里的出现次数,最后用reset_index()把分组索引转成普通列,并重命名计数列为count。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:07:12