Замена повторяющихся ID в датасете
В csv файле +1М записей типа:
product_id;product_name
FUR-BO-10000112;Mania Corner Shelving, Pine
Много записей с одинаковыми product_id и product_name, это нормально, так и должно быть. Но встречаются записи с одинаковым product_id, но разным product_name, причем следуют они не по порядку. Как с помощью python добавить, допустим, '-1' к product_id с другим product_name, чтобы в итоге у одинаковых product_name сохранился одинаковый product_id, а у разных product_name он отличался?
Ответы (1 шт):
попробуйте так:
import pandas as pd
df = pd.read_csv("ваш файл", sep=";")
df["product_id"] = df["product_id"] + "-" + (df.groupby("product_id")["product_id"].cumcount()+1).astype("str")
df, соответственно, получится:
product_id product_name
0 FUR-BO-10000112-1 Mania Corner Shelving, Pine
1 FUR-BO-10000112-2 Bush Birmingham Collection Bookcase, Dark Cherry
2 FUR-BO-10000668-1 Sauder Classic Bookcase, Mobile
3 FUR-BO-10000668-2 Ikea Corner Shelving, Traditional
4 FUR-BO-10002204-1 Mania Floating Shelf Set, Traditional
5 FUR-BO-10002204-2 Bush Corner Shelving, Traditional
6 FUR-BO-10002204-3 Bush Classic Bookcase, Pine
UPDATE
После уточнений автора вопроса могу предложить следующий вариант:
При df:
id name
0 c ccc1
1 a aaa1
2 b bbb3
3 b bbb1
4 a aaa1
5 a aaa2
6 b bbb3
7 a aaa2
8 a aaa1
9 a aaa3
10 a aaa3
11 b bbb2
12 c ccc1
делаем двойную группировку:
df["new_id"] = df["id"] + "-" + (df.groupby("id")[["name"]].apply(lambda x: x).groupby("name").grouper.group_info[0]).astype("str")
получаем df:
id name new_id
1 a aaa1 a-0
4 a aaa1 a-0
8 a aaa1 a-0
5 a aaa2 a-1
7 a aaa2 a-1
9 a aaa3 a-2
10 a aaa3 a-2
3 b bbb1 b-3
11 b bbb2 b-4
2 b bbb3 b-5
6 b bbb3 b-5
0 c ccc1 c-6
12 c ccc1 c-6
Здесь я специально сделал новую колонку с новым id для наглядности. Разумеется, можно перезаписать и старый id.