将一列拆分为多列,计数频率:“int”对象不可迭代

Posted

技术标签:

【中文标题】将一列拆分为多列,计数频率:“int”对象不可迭代【英文标题】:Splitting one column into many, counting frequency: 'int' object is not iterable 【发布时间】:2017-02-19 06:08:41 【问题描述】:

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

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

how to split one column into many columns and count the frequency

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

  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”对象不可迭代的错误。这是我目前正在使用的那个用户的代码:

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)

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

谢谢!

【问题讨论】:

df['page'].apply(...) 通话的结果是什么? @PatrickHaugh 嗨帕特里克,我的df['page'].apply(...) 的结果是:TypeError: 'int' object is not iterable 【参考方案1】:

这是你想要的吗?

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

【讨论】:

是的 - 非常感谢!这节省了几个小时的工作时间......我想我一直在误解aggfunc='size',在对记录器进行分组后使用它。

以上是关于将一列拆分为多列,计数频率:“int”对象不可迭代的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SQL 将一列拆分为多列

使用 SSIS OR T-SQL 将一列带引号和不带引号的逗号分隔值拆分为多列

SQL Server将一列拆分成多列

sql数据拆分

如何通过PHP将一列json对象拆分为更多列

oracle单行多列,拆分成多行