2016-10-19 3 views
0

У меня есть dataFrame:Calc значение счета в нескольких столбцах DataFrame (Панды Python)

id code_1 code_2 
0 11 1451  ffx 
1 15 2233  ffx 
2 24 1451  mmg 
3 15 1451  ffx 

мне нужно получить количество каждого значения кода (для всех значений code_1 и все значения code_2) для уникального идентификатора. Например:

id 1451 2233 ... ffx mmg ... 
0 11 1  0 ... 1 0 ... 
1 15 1  1 ... 2 0 ... 
2 24 1  0 ... 0 1 ... 

Я делаю этот код:

y = data.groupby('id') 
     .apply(lambda x: x[['code_1', 'code_2']].unstack().value_counts()) 
     .unstack() 

Но я думаю, что что-то неправильно, потому что число результат столбцов таблицы меньше числа varians code_1 и code_2.

+0

Я не вижу проблемы здесь. Для столбца 'code_1' есть _two_ уникальные значения, а для' code_2' есть _two_ уникальные значения. Таким образом, в общей сложности должны быть * четыре * столбца. Результат вашего кода содержит 4 столбца. –

+0

не выводит мой код, это просто пример того, что мне нужно – CyberDreamer

ответ

1

Рассмотрите возможность слияния pivot_tables с помощью aggfunc len для подсчета.

from io import StringIO 
import pandas as pd 

data = ''' 
id code_1 code_2 
11 1451  ffx 
15 2233  ffx 
24 1451  mmg 
15 1451  ffx''' 

df = pd.read_table(StringIO(data), sep="\s+") 

df = pd.merge(df[['id', 'code_1']].pivot_table(index='id', columns='code_1', aggfunc=len).\ 
               reset_index(drop=True), 
       df[['id', 'code_2']].pivot_table(index='id', columns='code_2', aggfunc=len).\ 
               reset_index(drop=True), 
       left_index=True, right_index=True).fillna(0) 

# 1451 2233 ffx mmg 
# 0 1.0 0.0 1.0 0.0 
# 1 1.0 1.0 2.0 0.0 
# 2 1.0 0.0 0.0 1.0 
Смежные вопросы