Python(pandas) - 用count重置索引

时间:2016-04-14 10:12:21

标签: python pandas group-by

我有一个DataFrame:

  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 个答案:

答案 0 :(得分: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