2014-12-14 6 views
0

Я пишу несколько сводных таблиц с помощью панд. Для многих из них мне нужно вернуть уникальные значения. В двумерной сводной таблице приведенный ниже код работает так, как должен. Когда я добавляю третье измерение, код возвращает счет, а не уникальный счетчик. Я подозреваю, что это имеет какое-то отношение к aggfunc, но не может определить, что его нужно изменить.Pandas: pivot_table уникальный счет возвращает count

код ниже:

data = pd.read_csv('scrubbed_data.csv', usecols = ['col_1', 'col_2', 'col_3']) 
cd1 = pd.tools.pivot.pivot_table(data = data, values = 'col_2', index = 'col_1', columns = 'col_3', aggfunc=lambda x: len(x.unique())) 
cd1.to_csv('pivot.csv') 

Ниже приведен макет данных, в соответствии с просьбой:

col_1    col_2    col_3 
location_1   id_1    type_1 
location_1   id_1    type_1 
location_2   id_1    type_1 
location_1   id_2    type_3 
location_3   id_3    type_4 

Цель состоит в том, чтобы подсчитать количество уникальных записей в col_2 дал col_1 и col_3. Что должно появиться в:

.   type_1 type_2 type_3 type_4 
location_1 1    0    1    0 
location_2 1    0    0    0 
location_3 0    0    0    0 

Однако следующий возвращается:

.   type_1 type_2 type_3 type_4 
location_1 2    0    1    0 
location_2 1    0    0    0 
location_3 0    0    0    0 

Где [1,1] является значение обижая в матрице.

+0

это поможет, если вы разместите образец вашего csv – elyase

+0

Я не могу воспроизвести ваши результаты из этих данных, а так как это 'type_1' вместо' category_1', который не может быть результатом этого макета. Не могли бы вы привести самодостаточный пример? – DSM

ответ

1

Используйте GroupBy, чтобы получить в каждой комбинации col_1 и col_3, а затем поместить значение, чтобы получить col_3 значения в столбцах:

# Copying your data and reading from the clipboard: 
df = pd.read_clipboard() 

unique_counts = df.groupby(['col_1', 'col_3'])['col_2'].unique().map(len) 
unstacked = unique_counts.unstack(level='col_3').fillna(0) 

Выход:

unstacked 
Out[18]: 
col_3  type_1 type_3 type_4 
col_1        
location_1  1  1  0 
location_2  1  0  0 
location_3  0  0  1 
+0

Спасибо! Это сработало отлично! – mpritche

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