2015-11-15 3 views
3

У меня есть набор данных CSV, который я импортированные с помощью функции read_csv панд, и когда я бегу .Head() Я получаю следующий вывод таблицы:Извлечение и групповые данные в Python

LSOA code    Crime type 
0 E01006687    Burglary 
1 E01007229 Anti-social behaviour 
2 E01007229 Anti-social behaviour 
3 E01007229 Anti-social behaviour 
4 E01007229    Burglary 
5 E01007229   Other theft 
6 E01007229   Other theft 
7 E01007229   Shoplifting 
8 E01007229 Theft from the person 
9 E01007230 Anti-social behaviour 
10 E01007230 Anti-social behaviour 
11 E01007230 Anti-social behaviour 
12 E01007230 Anti-social behaviour 
13 E01007230 Anti-social behaviour 
14 E01007230 Anti-social behaviour 
15 E01007230 Anti-social behaviour 
16 E01007230 Anti-social behaviour 
17 E01007230 Anti-social behaviour 
18 E01007230 Anti-social behaviour 
19 E01007230 Anti-social behaviour 

Эту таблица имеет более 33 000 строк. Что мне нужно сделать, так это получить все уникальные значения «LSOA code», из которых 207, а затем для каждого «кода LSOA», мне нужно значение для количества событий каждого типа «Тип преступления». из которых насчитывается около 30, а затем сумма общих преступлений для каждого кода LSOA

Например: Я хотел бы следующий вид таблицы выходных данных, где «LSOA код» является индекс столбца:

LSOA code | Burglary | Anti-social Behavior | Bicycle Theft | Assault ... | Total 

E01000067 | 32 | 21 | 8 | 43 ... | 1023 

E01000043 | 98 | 65 | 5 | 73 ... | 2308 

E01000237 | 38 | 34 | 12 | 92 ... | 897 

E01000038 | 82 | 28 | 3 | 18 ... | 2147 

и т.д.

мне удалось получить коды LSOA в dataframe, с общим количеством преступлений в каждом LSOA используя следующее:

WirralCrimes = Crimes['LSOA code'].value_counts() 
CrimeDF = pd.DataFrame(pd.Series(WirralCrimes)) 
CrimeDF.columns = ["Count"] 

..но я не могу работать, как получить каждый тип преступления в колонке и просуммировать для каждого мест где LSOA

Может кто-нибудь мне точку в правильном направлении, что я должен делать ?

Большое спасибо

+0

Обратите внимание, что размещение образа dataframe вместо текстовой версии гораздо менее полезны, потому что никто не может скопируйте и вставьте его, чтобы воспроизвести рамку. Если кто-то хотел показать, как работает ваш подход к вашим данным, им придется вводить все это вручную. – DSM

+0

Эй, извините, но я не понимаю, как включить текст? Вывод таблицы - это таблица HTML, поскольку я использую Jupyter. Есть ли способ включить текст? – Cobain

+0

может быть что-то вроде 'print (df.head(). To_string())'? – DSM

ответ

0

Это должно работать, если у вас данные напоминает это:

df = DataFrame({'LSOA code':['E01006687','E01007229','E01007229','E01007229','E01007229','E01007229','E01007229','E01007229','E01007230','E01007230'] 
, 'Crime type':['Burglary','Anti-social behaviour','Anti-social behaviour','Anti-social behaviour','Burglary','Other theft','Other theft','Shoplifting','Theft from the person','Anti-social behaviour']}) 


your_data['count'] = 1 

table = pandas.pivot_table(your_data, index='LSOA code', columns='Crime type',values='count',aggfunc='sum') 
table ["total"] = table.sum(axis=1) 
+1

. Пожалуйста, добавьте некоторое объяснение в свой ответ! –

+0

Hi- спасибо за ваш комментарий. Ваше решение вроде сработало, но дополнительные столбцы в dataframe немного перепутали, поэтому я сбросил все, что не было нужным (см. Мой отредактированный вопрос), и теперь он выдает ошибку: DataError: нет числовых типов для агрегирования – Cobain

Смежные вопросы