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