Pandasで同一のIDだった時に連番を追加する

売上のトランザクションデータの抽出を依頼したときに、売上IDのナンバー(伝票番号の枝番みたいな)の抽出依頼を忘れていた。

再度抽出依頼をするのもあれなので、自分で番号を降ることにする。

GroupBy.cumcount()

検索したらこの方法で決着。groupbyでまとめてから連番を付与して…とか色々考えていたが、さくっと解決。

import pandas as pd
df = pd.DataFrame({'ID': [1, 2, 3, 3, 4, 5, 5], 'Name': ['Noto', 'Hisakawa', 'Kouda', 'Hayashibara', 'sakamoto', 'tamura', 'mitsuishi'], 'score':[100, 50, 80, 50, 100, 70, 55]})
df['child_id'] = df.groupby('ID').cumcount()
df

ID	Name	score	child_id
0	1	Noto	100	0
1	2	Hisakawa	50	0
2	3	Kouda	80	0
3	3	Hayashibara	50	1
4	4	sakamoto	100	0
5	5	tamura	70	0
6	5	mitsuishi	55	1

あとはIDにくっつけてユニークなIDにすれば、キーとして使えるようになる。

ゼロ番から始まるのが嫌!って言う人(他部署に多い)がいたら、cumcountする際に+1しておけば良い。

import pandas as pd
df = pd.DataFrame({'ID': [1, 2, 3, 3, 4, 5, 5], 'Name': ['Noto', 'Hisakawa', 'Kouda', 'Hayashibara', 'sakamoto', 'tamura', 'mitsuishi'], 'score':[100, 50, 80, 50, 100, 70, 55]})
df['child_id'] = df.groupby('ID').cumcount() + 1
df

ID	Name	score	child_id
0	1	Noto	100	1
1	2	Hisakawa	50	1
2	3	Kouda	80	1
3	3	Hayashibara	50	2
4	4	sakamoto	100	1
5	5	tamura	70	1
6	5	mitsuishi	55	2
このサイトの主
投稿を作成しました 98

関連投稿

検索語を上に入力し、 Enter キーを押して検索します。キャンセルするには ESC を押してください。

トップに戻る