Suche…


Wählen Sie dupliziert aus

Wenn Bedarf Sollwert 0 bis Spalte B , wo in Spalte A dupliziert werden Daten die erste Maske durch erstellen Series.duplicated und verwenden Sie dann DataFrame.ix oder 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

Wenn Sie die Maske invertieren möchten, verwenden Sie ~ :

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

Duplizieren

Verwenden Sie 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

Wenn Sie keine Kopie eines Datenrahmens erhalten möchten, sondern den vorhandenen Rahmen ändern möchten:

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

Zählen und einzigartige Elemente erhalten

Anzahl eindeutiger Elemente in einer Serie:

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

Erhalten Sie einzigartige Elemente in einer Serie:

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

Anzahl eindeutiger Elemente in jeder Gruppe:

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

Erhalten Sie einzigartige Elemente in jeder Gruppe:

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

Ermitteln Sie eindeutige Werte aus einer Spalte.

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

Um eindeutige Werte in Spalte A und B zu erhalten.

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

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

Um die eindeutigen Werte in Spalte A als Liste abzurufen, beachten Sie, dass unique() auf zwei verschiedene Arten verwendet werden kann.

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

Hier ist ein komplexeres Beispiel. Angenommen, wir möchten die eindeutigen Werte aus Spalte 'B' ermitteln, wobei 'A' gleich 1 ist.

Lassen Sie uns zunächst ein Duplikat einführen, damit Sie sehen können, wie es funktioniert. Ersetzen Sie die 6 in Zeile '4', Spalte 'B' durch eine 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

Wählen Sie nun die Daten aus:

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

Dies lässt sich durch den ersten Blick auf den inneren DataFrame aufteilen:

df['A'] == 1 

Dies findet Werte in Spalte A, die gleich 1 sind, und wendet auf sie Wahr oder Falsch an. Wir können dies dann verwenden, um Werte aus der Spalte 'B' des DataFrame (der äußeren DataFrame-Auswahl) auszuwählen.

Zum Vergleich ist hier die Liste, wenn wir nicht eindeutig verwenden. Es ruft jeden Wert in Spalte 'B' ab, wobei Spalte 'A' 1 ist

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow