我有一个数据框:
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'] = ??
我尝试过分组并看到使用排名的示例,但我不认为这是因为我的所有行都相同?
答案 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