2016-04-14 4 views
1

У меня есть DataFrame:Python (панды) - сброс индекса со счетом

HH  PERSON SPOT WEIGHT 
    1002141 aa 1  1332.25 
    1011831 ab 1  2083.31 
    1031726 aa 1  2589.09 
    1042819 aa 1  4736.28 
    1043006 aa 1  1588.39 
    1043006 aa 1  1588.39 
    1060911 aa 1  1113.97 
    1001665 aa 2  3202.09 
    1001762 aa 2  2048.54 

То, что я пытаюсь сделать, это создать количество столбцов всех вхождений, которые повторяются, в примере выше линии 5 и 6 являются одинаковыми, поэтому я хочу, хочу выход быть:

HH  PERSON SPOT WEIGHT COUNT  
    1002141 aa 1  1332.25  1 
    1011831 ab 1  2083.31  1 
    1031726 aa 1  2589.09  1 
    1042819 aa 1  4736.28  1 
    1043006 aa 1  1588.39  2 
    1060911 aa 1  1113.97  1 
    1001665 aa 2  3202.09  1 
    1001762 aa 2  2048.54  1 

То, что я сделал это:

count_table=df.groupby(['HH','PERSON','SPOT ID']).agg(['count']).reset_index() 

Это работает, но индексы становятся все испорченными - и он сортирует его по столбцу HH вместо исходного индекса.

Любые идеи, как я могу сбросить индексы таблицы?

ответ

1

Вы можете использовать transform для этого, чтобы добавить столбец подсчета, который является только размер группы в этом случае:

In [164]: 
df['Count'] = df.groupby(['HH','PERSON','SPOT'])['WEIGHT'].transform('size') 
df 

Out[164]: 
     HH PERSON SPOT WEIGHT Count 
0 1002141  aa  1 1332.25  1 
1 1011831  ab  1 2083.31  1 
2 1031726  aa  1 2589.09  1 
3 1042819  aa  1 4736.28  1 
4 1043006  aa  1 1588.39  2 
5 1043006  aa  1 1588.39  2 
6 1060911  aa  1 1113.97  1 
7 1001665  aa  2 3202.09  1 
8 1001762  aa  2 2048.54  1 
+0

Отлично! Спасибо! –