Recherche…


Sélectionnez dupliqué

Si nécessaire, définissez la valeur 0 sur la colonne B , où dans la colonne A les données dupliquées créent d'abord le masque par Series.duplicated , puis utilisent DataFrame.ix ou 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

Si besoin inverser masque utiliser ~ :

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 dupliqué

Utilisez 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

Lorsque vous ne souhaitez pas obtenir une copie d'un bloc de données, mais modifier celle existante:

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

Compter et obtenir des éléments uniques

Nombre d'éléments uniques dans une série:

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

Obtenez des éléments uniques dans une série:

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

Nombre d'éléments uniques dans chaque groupe:

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

Obtenez des éléments uniques dans chaque groupe:

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

Obtenez des valeurs uniques dans une colonne.

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

Pour obtenir des valeurs uniques dans les colonnes A et 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])

Pour obtenir les valeurs uniques de la colonne A en tant que liste (notez que unique() peut être utilisé de deux manières légèrement différentes)

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

Voici un exemple plus complexe. Disons que nous voulons trouver les valeurs uniques de la colonne 'B' où 'A' est égal à 1.

D'abord, introduisons un doublon pour voir comment cela fonctionne. Remplaçons le 6 dans la ligne '4', la colonne 'B' avec un 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

Sélectionnez maintenant les données:

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

Cela peut être décomposé en pensant au DataFrame interne en premier:

df['A'] == 1 

Cela trouve des valeurs dans la colonne A qui sont égales à 1 et leur applique True ou False. Nous pouvons alors l'utiliser pour sélectionner les valeurs de la colonne 'B' du DataFrame (la sélection externe DataFrame)

Pour comparaison, voici la liste si nous n'utilisons pas unique. Il récupère chaque valeur dans la colonne 'B' où la colonne 'A' est 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow