Как создать нулевое значение, если значение не является первым вхождением на основе комбинации из трех столбцов

#python #python-3.x

#python #python-3.x

Вопрос:

У меня есть фрейм данных с тремя столбцами, хотелось сохранить только уникальные значения в последнем столбце, т. е. ‘CU’ на основе комбинации из трех столбцов.

 import pandas as pd
data = [['Alex','AL',10],['Bob','AB',15],['Clarke','CC',9],['Alex','Ac',11],['Bob','Ay',10],['Clarke','cv',13],['Alex','Ac',11],['Bob','Ay',13],['Clarke','cv',13]]
df = pd.DataFrame(data,columns=['Name','Cat','Cu'],dtype=float)

df
Out[460]: 
     Name Cat    Cu
0    Alex  AL  10.0
1     Bob  AB  15.0
2  Clarke  CC   9.0
3    Alex  Ac  11.0
4     Bob  Ay  10.0
5  Clarke  cv  13.0
6    Alex  Ac  11.0
7     Bob  Ay  13.0
8  Clarke  cv  13.0
  

Для приведенного выше фрейма данных необходимо преобразовать значение столбца CU в ноль, если комбинация не является первым вхождением. в основном, пытаясь идентифицировать уникальное значение на основе трех столбцов одновременно, необходимо поддерживать все строки.

 INPUT:

    df
    Out[460]: 
         Name Cat    Cu
    0    Alex  AL  10.0
    1     Bob  AB  15.0
    2  Clarke  CC   9.0
    3    Alex  Ac  11.0
    4     Bob  Ay  10.0
    5  Clarke  cv  13.0
    6    Alex  Ac  11.0
    7     Bob  Ay  13.0
    8  Clarke  cv  13.0

OUTPUT:

         Name Cat    Cu
    0    Alex  AL  10.0
    1     Bob  AB  15.0
    2  Clarke  CC   9.0
    3    Alex  Ac  11.0
    4     Bob  Ay  10.0
    5  Clarke  cv  13.0
    6    Alex  Ac  0
    7     Bob  Ay  13.0
    8  Clarke  cv  0
  

Ответ №1:

Используйте GroupBy.cumcount

 df.loc[df.groupby(['Name', 'Cat', 'Cu']).cumcount().gt(0), 'Cu'] = 0
  

      Name Cat    Cu
0    Alex  AL  10.0
1     Bob  AB  15.0
2  Clarke  CC   9.0
3    Alex  Ac  11.0
4     Bob  Ay  10.0
5  Clarke  cv  13.0
6    Alex  Ac   0.0
7     Bob  Ay  13.0
8  Clarke  cv   0.0