我有一個問題,我需要將資料按兩組分組,并附加一個對子組進行計數的列。
示例資料框如下所示:
colA colB
1 a
1 a
1 c
1 c
1 f
1 z
1 z
1 z
2 a
2 b
2 b
2 b
3 c
3 d
3 k
3 k
3 m
3 m
3 m
附加新列后的預期輸出如下:
colA colB colC
1 a 1
1 a 1
1 c 2
1 c 2
1 f 3
1 z 4
1 z 4
1 z 4
2 a 1
2 b 2
2 b 2
2 b 2
3 c 1
3 d 2
3 k 3
3 k 3
3 m 4
3 m 4
3 m 4
我嘗試了以下方法,但無法解決這個看似微不足道的問題:
解決方案 1 我試過但沒有給出我想要的:
df['ONES']=1
df['colC']=df.groupby(['colA','colB'])['ONES'].cumcount() 1
df.drop(columns='ONES', inplace=True)
我也玩過變換和累積函式,并應用,但我似乎無法解決這個問題。任何幫助表示贊賞。
編輯:資料幀上的小錯誤。
編輯 2:為簡單起見,我為 B 列顯示了相似的值,但問題出在一個更大的組內(由 colA 表示),colB 可能不同,因此需要同時將其分組。
編輯 3:更新資料框以強調我的第二次編輯的意思。希望這使它更加清晰和可復制。
uj5u.com熱心網友回復:
你可以使用groupby ngroup:
df['colC'] = df.groupby('colA').apply(lambda x: x.groupby('colB').ngroup() 1).droplevel(0)
輸出:
colA colB colC
0 1 a 1
1 1 a 1
2 1 c 2
3 1 c 2
4 1 f 3
5 1 z 4
6 1 z 4
7 1 z 4
8 2 a 1
9 2 b 2
10 2 b 2
11 2 b 2
12 3 c 1
13 3 d 2
14 3 k 3
15 3 k 3
16 3 m 4
17 3 m 4
18 3 m 4
uj5u.com熱心網友回復:
明確地,分解
df['colC'] =df['colB'].astype('category').cat.codes 1
colA colB colC
0 1 a 1
1 1 a 1
2 1 b 2
3 1 b 2
4 1 c 3
5 1 d 4
6 1 d 4
7 1 d 4
8 2 a 1
9 2 b 2
10 2 b 2
11 2 b 2
12 3 a 1
13 3 b 2
14 3 c 3
15 3 c 3
16 3 d 4
17 3 d 4
18 3 d 4
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/453877.html
標籤:Python 熊猫 数据框 熊猫-groupby
