[英]How to enumerate groups within groups in pandas
我有一個像這樣的DataFrame:
name visit foo
0 andrew BL a
1 andrew BL a
2 andrew BL b
3 andrew BL b
4 bob BL c
5 bob BL c
6 bob BL d
7 bob BL d
8 bob M12 e
9 bob M12 e
10 bob M12 f
11 bob M12 g
12 carol BL h
13 carol BL i
14 carol BL j
15 carol BL k
如何創建一個新列,列出每組['name', 'visit']
的foo
組,像這樣?
name visit foo enum
0 andrew BL a 1
1 andrew BL a 1
2 andrew BL b 2
3 andrew BL b 2
4 bob BL c 1
5 bob BL c 1
6 bob BL d 2
7 bob BL d 2
8 bob M12 e 1
9 bob M12 e 1
10 bob M12 f 2
11 bob M12 g 3
12 carol BL h 1
13 carol BL i 2
14 carol BL j 3
15 carol BL k 4
df['enum'] = df.groupby(['name', 'visit'])['foo'].transform(lambda x: pd.factorize(x)[0] + 1)
print (df)
name visit foo enum
0 andrew BL a 1
1 andrew BL a 1
2 andrew BL b 2
3 andrew BL b 2
4 bob BL c 1
5 bob BL c 1
6 bob BL d 2
7 bob BL d 2
8 bob M12 e 1
9 bob M12 e 1
10 bob M12 f 2
11 bob M12 g 3
12 carol BL h 1
13 carol BL i 2
14 carol BL j 3
15 carol BL k 4
您可以修改coldspeed的評論以使用:
df = pd.concat([
df,
df.groupby([df.name, df.visit]).apply(lambda g: g.groupby('foo').ngroup() + 1).reset_index().rename(columns={0: 'enum'})['enum']],
axis=1)
>>> df
name visit foo enum
0 andrew BL a 1
1 andrew BL a 1
2 andrew BL b 2
3 andrew BL b 2
4 bob BL c 1
5 bob BL c 1
6 bob BL d 2
7 bob BL d 2
8 bob M12 e 1
9 bob M12 e 1
10 bob M12 f 2
11 bob M12 g 3
12 carol BL h 1
13 carol BL i 2
14 carol BL j 3
15 carol BL k 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.