Python 计算groupby对象中的组具有特定值的次数

Python 计算groupby对象中的组具有特定值的次数,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据框,看起来像这样 hostname level 0 host1 1 1 host2 2 2 host3 3 3 host1 3 4 host1 4 5 host2 2 ... hostname level1_occur level2_occur level3_occur level4_occur 0 host1

我有一个熊猫数据框,看起来像这样

   hostname    level
0  host1         1
1  host2         2
2  host3         3
3  host1         3
4  host1         4
5  host2         2
...
  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
当我按主机名对这个数据帧进行分组并使用

>>>frame.groupby("hostname").level.value_counts()
我明白了

其中第三列是该特定主机名在该级别的出现次数。我想从这个数据创建一个如下所示的数据帧

   hostname    level
0  host1         1
1  host2         2
2  host3         3
3  host1         3
4  host1         4
5  host2         2
...
  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
其中,我为每个主机名的某个级别的出现次数设置了单独的列,但我很难找到任何可以做到这一点的内容。有没有一种有效的方法来做到这一点,而不是一次又一次地在整个数据帧中循环

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
IIUC


您可以使用
取消堆叠

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

您可以使用
取消堆叠

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