计算熊猫groupby对象中某个组具有特定值的次数

时间:2018-06-27 18:16:26

标签: python pandas dataframe

我有一个像这样的熊猫数据框

   hostname    level
0  host1         1
1  host2         2
2  host3         3
3  host1         3
4  host1         4
5  host2         2
...

当我按主机名将此数据帧分组并使用时获得严重性列的值计数

>>>frame.groupby("hostname").level.value_counts()

我明白了

hostname  level
host1       1      1
            3      1
            4      1
host2       2      2
host3       3      1
...

其中第三列是该特定主机名在该级别出现的次数。我想从此数据创建一个看起来像这样的数据框

  hostname    level1_occur    level2_occur    level3_occur    level4_occur
0  host1           1               0              1              1
1  host2           0               2              0              0
2  host3           0               0              0              1

我在每个字段中都有单独的列,用于显示每个主机名级别出现的次数,但是我很难找到能做到这一点的任何东西。是否有一种有效的方法来执行此操作。一遍又一遍地遍历整个数据帧?

2 个答案:

答案 0 :(得分:5)

IIUC

pd.crosstab(df.hostname,df.level)
Out[360]: 
level     1  2  3  4
hostname            
host1     1  0  1  1
host2     0  2  0  0
host3     0  0  1  0

答案 1 :(得分:3)

您可以使用unstack

dft = frame.groupby("hostname").level.value_counts()
dft.unstack(fill_value=0)\
   .add_prefix('level')\
   .add_suffix('_occur')\
   .reset_index()

输出:

level hostname  level1_occur  level2_occur  level3_occur  level4_occur
0        host1             1             0             1             1
1        host2             0             2             0             0
2        host3             0             0             1             0