当每个组中的所有行相同时,为pandas分组数据框中的每个条目生成行号

时间:2016-11-17 09:57:16

标签: pandas numpy

我有一个数据框:

Test = pd.DataFrame([['US','CA', 'Los Angles', 10], ['US','IL', 'Springfield', 20]], 
         columns = ['country', 'state', 'city', 'counter'])

我想重复每一行计数器中的次数,因此我使用numpy

pet = pd.DataFrame(np.repeat(Test.values, Test['counter'].values, axis = 0), columns = Test.columns)

现在如何为每个组添加行号? 所以它应该为洛杉矶运行0 to 9,为Springfield运行0 - 19

Result = pet.groupby(['country', 'state', 'city'])
Result['row_number'] = ??

我尝试过分组并看到使用排名的示例,但我不认为这是因为我的所有行都相同?

1 个答案:

答案 0 :(得分:2)

您需要cumcount

pet['row_number'] = pet.groupby(['country', 'state', 'city']).cumcount()
print (pet) 
   country state         city counter  row_number
0       US    CA   Los Angles      10           0
1       US    CA   Los Angles      10           1
2       US    CA   Los Angles      10           2
3       US    CA   Los Angles      10           3
4       US    CA   Los Angles      10           4
5       US    CA   Los Angles      10           5
6       US    CA   Los Angles      10           6
7       US    CA   Los Angles      10           7
8       US    CA   Los Angles      10           8
9       US    CA   Los Angles      10           9
10      US    IL  Springfield      20           0
11      US    IL  Springfield      20           1
12      US    IL  Springfield      20           2
13      US    IL  Springfield      20           3
14      US    IL  Springfield      20           4
15      US    IL  Springfield      20           5
16      US    IL  Springfield      20           6
17      US    IL  Springfield      20           7
18      US    IL  Springfield      20           8
19      US    IL  Springfield      20           9
20      US    IL  Springfield      20          10
21      US    IL  Springfield      20          11
22      US    IL  Springfield      20          12
23      US    IL  Springfield      20          13
24      US    IL  Springfield      20          14
25      US    IL  Springfield      20          15
26      US    IL  Springfield      20          16
27      US    IL  Springfield      20          17
28      US    IL  Springfield      20          18
29      US    IL  Springfield      20          19