Мне нужно создать новый столбец на основе уникальных комбинаций в данных ниже
import pandas as pd
df = pd.DataFrame({'ID': [1001, 1002, 1003, 1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014],
'G': ['G1','G1','G1','G1', 'G2','G2','G2', 'G3','G3','G3', 'G4','G4','G4','G4',],
'F': ['F1','F1', 'F2','F2','F1','F1','F1','F1','F1','F1','F1','F1','F1','F1',],
'SF': ['SF1', 'SF2', 'SF1','SF1','SF1','SF1','SF2','SF1','SF1','SF1','SF1','SF2','SF3','SF4']
}
)
df
Согласно приведенной ниже таблице, столбцы G, F, SF будут иметь уникальные комбинации для каждого значения в столбце ID1. Для каждой уникальной комбинации в конце должен быть сгенерирован новый столбец (ID2).
Пример вывода ниже
Однако я пытаюсь добиться этого с помощью SQL, хочу проверить, можно ли это сделать с помощью Pandas.
Это промах... обновил ожидаемую таблицу вывода.
Спасибо! все еще существует двусмысленность в отношении последовательных и абсолютных дубликатов, но я предоставил оба варианта в своем ответе;)
Логика не совсем ясна, но если вы забыли 2004 год и хотите увеличить, когда есть не дубликат, вы можете сделать:
cols = ['G', 'F', 'SF']
# global duplicates
df['ID2'] = (~df[cols].duplicated()).cumsum().add(2000)
# consecutive duplicates
df['ID3'] = df[cols].ne(df[cols].shift()).any(1).cumsum().add(2000)
NB. также неясно, хотите ли вы учитывать глобальные или последовательные дубликаты (оба приводят к одному и тому же результату в предоставленном наборе данных), я предложил решение для обоих случаев (ID2 и ID3 соответственно).
выход:
ID G F SF ID2 ID3
0 1001 G1 F1 SF1 2001 2001
1 1002 G1 F1 SF2 2002 2002
2 1003 G1 F2 SF1 2003 2003
3 1004 G1 F2 SF1 2003 2003
4 1005 G2 F1 SF1 2004 2004
5 1006 G2 F1 SF1 2004 2004
6 1007 G2 F1 SF2 2005 2005
7 1008 G3 F1 SF1 2006 2006
8 1009 G3 F1 SF1 2006 2006
9 1010 G3 F1 SF1 2006 2006
10 1011 G4 F1 SF1 2007 2007
11 1012 G4 F1 SF2 2008 2008
12 1013 G4 F1 SF3 2009 2009
13 1014 G4 F1 SF4 2010 2010
логика непонятна, почему вы пропускаете 2004 а не 2006?