2017-09-23 5 views
1

ich einen Datenrahmen wie diese habe:die eindeutigen Werte in einem Datenrahmen Spalte mit ihrer Zählung

Index Label 
0  ABCD 
1  EFGH 
2  ABCD 
3  ABCD 
4  EFGH 
5  ABCD 
6  IJKL 
7  IJKL 
8  ABCD 
9  EFGH 

So „ABCD“ tritt auf 5 mal „EFGH“ 3-mal und „IJKL“ zweimal. Ich möchte das Auftreten von jedem Etikett zählen und die einzelnen Etiketten mit ihrer Zählung zu ersetzen, wird die folgende erhalten:

Index Label 
0  5 
1  3 
2  5 
3  5 
4  3 
5  5 
6  2 
7  2 
8  5 
9  3 

Was die schönste Art und Weise, dies zu tun? Vielen Dank!

Antwort

2

Verwenden map von Series von value_counts erstellt:

df['Label'] = df['Label'].map(df['Label'].value_counts()) 
print (df) 
    Label 
0  5 
1  3 
2  5 
3  5 
4  3 
5  5 
6  2 
7  2 
8  5 
9  3 

Eine andere Lösung mit transform + size:

df['Label'] = df.groupby('Label')['Label'].transform('size') 
print (df) 

    Label 
0  5 
1  3 
2  5 
3  5 
4  3 
5  5 
6  2 
7  2 
8  5 
9  3 
+0

'size' umfasst NaNs, und falsch ist. –

+0

Bist du sicher? Ich denke immer ist notwendig "Größe", und wenn Bedarf "NaN' s Notwendigkeit "zählen" (seltenste Verwendung) – jezrael

+0

"Ersetzen Sie Elemente mit ihren Zählungen", so nicht Nan zählt. Was passiert mit Nans in der Gruppe? (Ich weiß es nicht, also frage ich) –

1

Verwenden groupby und transform:

print(df) 
     Label 
Index  
0  ABCD 
1  EFGH 
2  ABCD 
3  ABCD 
4  EFGH 
5  ABCD 
6  IJKL 
7  IJKL 
8  ABCD 
9  EFGH 

df['Label'] = df.groupby('Label').Label.transform('count') 
print(df) 
     Label 
Index  
0   5 
1   3 
2   5 
3   5 
4   3 
5   5 
6   2 
7   2 
8   5 
9   3 

Wenn Ihre Spalte keine NaN s, size und count enthält, geben Sie die gleichen Werte ein. Andernfalls size enthält NaN s, so vermeiden Sie es zu verwenden.


Eine weitere Möglichkeit, mit Counter:

from collections import Counter 

df['Label'] = df.Label.map(Counter(df.Label)) 
print(df) 
     Label 
Index  
0   5 
1   3 
2   5 
3   5 
4   3 
5   5 
6   2 
7   2 
8   5 
9   3 
+0

@ P.Prunesquallor Danke für die Verbesserung. –

+1

@ P.Prunesquallor Wenn Sie die groupby-Lösung verwenden, verwenden Sie nicht die 'size', wie es die Lösung von jezrael hat. –

+0

Ich verstehe nicht 'Sonst Größe enthält NaNs, also vermeiden Sie es. Warum vermeiden? Ich denke, beide Funktionen sind nett - Und ich denke, Funktion "zählen" ist die beste nicht verwendet, nur wenn NaNs explizit auszuschließen. Ich denke, dass es keinen Grund gibt, "Größe" zu vermeiden, weil es gut ist, wenn ich weiß, dass ich einige NaNs habe (und ich denke, dass es keine NaNs in Daten gibt - besonders wenn Float-Daten). – jezrael

Verwandte Themen