Поиск…


Выберите дублированный

Если нужно установить значение 0 в столбец B , где в столбце A дублируются данные, сначала создайте маску с помощью Series.duplicated а затем используйте DataFrame.ix или Series.mask :

In [224]: df = pd.DataFrame({'A':[1,2,3,3,2],
     ...:                    'B':[1,7,3,0,8]})

In [225]: mask = df.A.duplicated(keep=False)

In [226]: mask
Out[226]: 
0    False
1     True
2     True
3     True
4     True
Name: A, dtype: bool

In [227]: df.ix[mask, 'B'] = 0

In [228]: df['C'] = df.A.mask(mask, 0)

In [229]: df
Out[229]: 
   A  B  C
0  1  1  1
1  2  0  0
2  3  0  0
3  3  0  0
4  2  0  0

Если нужно инвертировать маску, используйте ~ :

In [230]: df['C'] = df.A.mask(~mask, 0)

In [231]: df
Out[231]: 
   A  B  C
0  1  1  0
1  2  0  2
2  3  0  3
3  3  0  3
4  2  0  2

Двойное дублирование

Использовать drop_duplicates :

In [216]: df = pd.DataFrame({'A':[1,2,3,3,2],
     ...:                    'B':[1,7,3,0,8]})

In [217]: df
Out[217]: 
   A  B
0  1  1
1  2  7
2  3  3
3  3  0
4  2  8

# keep only the last value
In [218]: df.drop_duplicates(subset=['A'], keep='last')
Out[218]: 
   A  B
0  1  1
3  3  0
4  2  8

# keep only the first value, default value
In [219]: df.drop_duplicates(subset=['A'], keep='first')
Out[219]: 
   A  B
0  1  1
1  2  7
2  3  3

# drop all duplicated values
In [220]: df.drop_duplicates(subset=['A'], keep=False)
Out[220]: 
   A  B
0  1  1

Если вы не хотите получать копию фрейма данных, но для изменения существующего:

In [221]: df = pd.DataFrame({'A':[1,2,3,3,2],
     ...:                    'B':[1,7,3,0,8]})

In [222]: df.drop_duplicates(subset=['A'], inplace=True)

In [223]: df
Out[223]: 
   A  B
0  1  1
1  2  7
2  3  3

Подсчет и получение уникальных элементов

Количество уникальных элементов в серии:

In [1]: id_numbers = pd.Series([111, 112, 112, 114, 115, 118, 114, 118, 112])
In [2]: id_numbers.nunique()
Out[2]: 5

Получите уникальные элементы в серии:

In [3]: id_numbers.unique()
Out[3]: array([111, 112, 114, 115, 118], dtype=int64)

In [4]: df = pd.DataFrame({'Group': list('ABAABABAAB'), 
                           'ID': [1, 1, 2, 3, 3, 2, 1, 2, 1, 3]})

In [5]: df
Out[5]: 
  Group  ID
0     A   1
1     B   1
2     A   2
3     A   3
4     B   3
5     A   2
6     B   1
7     A   2
8     A   1
9     B   3

Количество уникальных элементов в каждой группе:

In [6]: df.groupby('Group')['ID'].nunique()
Out[6]: 
Group
A    3
B    2
Name: ID, dtype: int64

Получите уникальные элементы в каждой группе:

In [7]: df.groupby('Group')['ID'].unique()
Out[7]: 
Group
A    [1, 2, 3]
B       [1, 3]
Name: ID, dtype: object

Получите уникальные значения из столбца.

In [15]: df = pd.DataFrame({"A":[1,1,2,3,1,1],"B":[5,4,3,4,6,7]})

In [21]: df
Out[21]: 
   A  B
0  1  5
1  1  4
2  2  3
3  3  4
4  1  6
5  1  7

Чтобы получить уникальные значения в столбцах A и B.

In [22]: df["A"].unique()
Out[22]: array([1, 2, 3])

In [23]: df["B"].unique()
Out[23]: array([5, 4, 3, 6, 7])

Чтобы получить уникальные значения в столбце A в виде списка (обратите внимание, что unique() может использоваться двумя разными способами)

In [24]: pd.unique(df['A']).tolist()
Out[24]: [1, 2, 3]

Вот более сложный пример. Скажем, мы хотим найти уникальные значения из столбца «B», где «A» равно 1.

Во-первых, давайте представим дубликат, чтобы вы могли видеть, как он работает. Давайте заменим 6 в строке «4», столбец «B» на 4:

In [24]: df.loc['4', 'B'] = 4    
Out[24]:    
   A  B
0  1  5
1  1  4
2  2  3
3  3  4
4  1  4
5  1  7

Теперь выберите данные:

In [25]: pd.unique(df[df['A'] == 1 ]['B']).tolist()
Out[25]: [5, 4, 7]

Это можно разбить, если сначала подумать о внутреннем DataFrame:

df['A'] == 1 

Это находит значения в столбце A, равные 1, и применяет к ним True или False. Затем мы можем использовать это для выбора значений из столбца «B» DataFrame (внешний выбор DataFrame)

Для сравнения, вот список, если мы не используем уникальный. Он извлекает каждое значение в столбце «B», где столбец «A» равен 1

In [26]: df[df['A'] == 1]['B'].tolist()
Out[26]: [5, 4, 4, 7]


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow