将一列拆分为多列,计数频率:“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”对象不可迭代的主要内容,如果未能解决你的问题,请参考以下文章