Создайте древовидную структуру с помощью Pandas

Мне нужно создать новый столбец на основе уникальных комбинаций в данных ниже

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).

Создайте древовидную структуру с помощью Pandas

Пример вывода ниже

Создайте древовидную структуру с помощью Pandas

Однако я пытаюсь добиться этого с помощью SQL, хочу проверить, можно ли это сделать с помощью Pandas.

логика непонятна, почему вы пропускаете 2004 а не 2006?

mozway 17.03.2022 10:42

Это промах... обновил ожидаемую таблицу вывода.

Osceria 17.03.2022 11:01

Спасибо! все еще существует двусмысленность в отношении последовательных и абсолютных дубликатов, но я предоставил оба варианта в своем ответе;)

mozway 17.03.2022 11:01
1
3
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Логика не совсем ясна, но если вы забыли 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

Другие вопросы по теме