売上のトランザクションデータの抽出を依頼したときに、売上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