#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