将一列拆分为多列,计算频率:'int' object is not iterable

Splitting one column into many, counting frequency: 'int' object is not iterable

这是我关于堆栈溢出的第一个问题,在我学习技巧时它可能有点笨拙 - 欢迎提供问题格式方面的提示或指示!

我是 python 的新手,遇到的问题几乎与以下问题相同:

对于我的数据,我有两列,"logger" 和 "page",其中 logger 是非空对象字符串格式的 IP 地址列,page 是随机的 1-10代表记录器访问过的网页的非空整数。下面是一个例子:

  logger        page
0 10.1.60.203   3
1 3.75.190.181  5
2 10.1.60.203   4
3 10.1.60.203   6
4 10.1.60.253   1

我想要做的是在记录器列中为每个唯一 IP 设置一行,并使用 1-10 的一系列列代表每个页面的页面浏览总数每个 IP 地址,然后按每一列进行计数,如下所示:

  logger        page1  page2  page3  page4  page5 ...
0 10.1.60.203   5      7      14     7      2
1 3.75.190.181  10     3      20     8      6
2 10.1.60.253   22     9      2      12     18

我已经尝试了很多不同的选项来解决这个问题——数据透视表、groupby,但我似乎无法理解如何将计数放入每个 IP 地址各自的唯一列中。当我来到另一个论坛时,我觉得这个答案应该很好用,但不幸的是我遇到了 'int' object is not iterable 的错误。这是我目前正在使用的那个用户的代码:

df2 = pd.DataFrame([x for x in df['page'].apply(
...           lambda item: dict(map(
...                                 lambda x: (x,1), 
...                             item)) 
...           ).values]).fillna(0) 
>>> df2.join(df)

我能稍微理解上述错误的含义,但我对从那里得出答案的能力没有信心。任何有关此错误或特定错误的帮助,或对我的问题的更广泛解决方案的任何帮助,将不胜感激。

谢谢!

这是你想要的吗?

In [8]: df
Out[8]:
         logger  page
0   10.1.60.203     3
1  3.75.190.181     5
2   10.1.60.203     4
3   10.1.60.203     6
4   10.1.60.253     1

In [9]: df.pivot_table(index='logger', columns='page', aggfunc='size', fill_value=0)
Out[9]:
page          1  3  4  5  6
logger
10.1.60.203   0  1  1  0  1
10.1.60.253   1  0  0  0  0
3.75.190.181  0  0  0  1  0