Я предполагаю, что вторая последняя строка ожидаемого ответа должна остаться как "Оранжевый 2" для Элемента и типа:
import pandas
df = pandas.DataFrame([['Apple', '10'],
['Orange', '5'],
['Pear', '8'],
['Apple', '10'],
['Pear', '5'],
['Orange', '2'],
['Pear', '5']],
columns = ['Item', 'Type'])
categories = []
for index,row in df.iterrows():
if tuple(row) not in categories:
categories.append(tuple(row))
df["Category"] = [categories.index(tuple(row))+1 for index,row in df.iterrows()]
print(df)
Это даст
Item Type Category
0 Apple 10 1
1 Orange 5 2
2 Pear 8 3
3 Apple 10 1
4 Pear 5 4
5 Orange 2 5
6 Pear 5 4
Поскольку здесь нет специальных операций для панд, использование панд не является необходимым (хотя это может быть полезно для других операций). Ключ заключается в том, чтобы определить уникальный список кортежей, который записывает каждую комбинацию Item и Type, и использовать функцию index, чтобы найти ее снова.