2016-10-10 8 views
1

Это мой первый вопрос о переполнении стека, и он может быть немного неуклюжим, поскольку я изучаю веревки - подсказки или указатели в вопросе форматирования приветствуются!Разделение одной колонки на многие, частота подсчета: объект «int» не является итерабельным

Я новичок в Python и есть вопрос, почти идентичный приведенному ниже:

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

Для моих данных, у меня есть две колонки, «регистратор» и «страницы», где регистратор представляет собой столбец IP-адресов в формате ненулевой строки объекта, а страница представляет собой рандомизированный 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) 

Я могу немного понять, что вышеупомянутые средства ошибок, но я не уверен в способности работать вне ответ там. Любая помощь с этой ошибкой или конкретным, или с более широким решением моей проблемы, будет очень признательна.

Спасибо!

+0

Каков результат вашей 'df ['page']. Apply (...)' call? –

+0

@PatrickHaugh Привет, Патрик, результат моего 'df ['page']. Apply (...)' is: 'TypeError: 'int' object is 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 
+0

Да - большое вам спасибо! Это сэкономило рабочее время ... Я думаю, что все это время я должен был просто недопонимать 'aggfunc = 'size'', используя его после группировки регистратора. –