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