Ich möchte so etwas bekommen.
A
1
1
2
3
3
4
4
4
4
Ich möchte es schaffen
A B
1 2
1 2
2 1
3 2
3 2
4 4
4 4
4 4
4 4
Wie Sie hier sehen, sind die Schlüssel dupliziert und befinden sich immer noch in derselben Reihenfolge wie das Original.
Ich weiß, wie man diese Aufgabe in R mithilfe von data.table erledigt, und ich weiß nur, wie man groupby verwendet, um eindeutige Schlüsselzahlen in Pandas zu erhalten.
Hat jemand Ideen?
Vielen Dank!
4 Antworten
Sie können dies verwenden:
import pandas as pd
df = pd.DataFrame({
'A' : [1, 1, 2, 3, 3, 4, 4, 4, 4]
})
df['B'] = df.groupby(['A'])['A'].transform('count')
print(df)
Ausgabe:
A B
0 1 2
1 1 2
2 2 1
3 3 2
4 3 2
5 4 4
6 4 4
7 4 4
8 4 4
Sie können ein groupby verwenden und zusammenführen:
df = pd.DataFrame({'A' : [1, 1, 2, 3, 3, 4, 4, 4, 4]})
df = df.merge(df.groupby('A').size().reset_index(), on='A')
Welches wird Ihnen geben:
A 0
0 1 2
1 1 2
2 2 1
3 3 2
4 3 2
5 4 4
6 4 4
7 4 4
8 4 4
Schneller Weg mit pd.factorize
und np.bincount
f = df.A.factorize()[0]
df.assign(B=np.bincount(f)[f])
A B
0 1 2
1 1 2
2 2 1
3 3 2
4 3 2
5 4 4
6 4 4
7 4 4
8 4 4
Erläuterung
pd.factorize
erstellt ein Array von Ganzzahlen, wobei jede Ganzzahl einen eindeutigen Wert im faktorisierten Array darstellt. Diese ganzen Zahlen beginnen bei Null.
f
array([0, 0, 1, 2, 2, 3, 3, 3, 3])
np.bincount
verwendet jeden Wert in einem Array von Ganzzahlen und zählt, wie oft diese Ganzzahl gesehen wurde. Wenn wir diese Ganzzahlen als Bins betrachten, zählen wir, wie oft auf jeden Bin verwiesen wird.
np.bincount(f)
array([2, 1, 2, 4])
Schließlich verwenden wir f
, um diese Zählungen aufzuteilen und uns die Zählungen zurückzugeben, die für jedes Mal wiederholt wurden, wenn auf den Behälter verwiesen wurde.
np.bincount(f)[f]
array([2, 2, 1, 2, 2, 4, 4, 4, 4])
Verwenden von map
mit groupby
size
df['B']=df.A.map(df.groupby('A').size())
df
Out[630]:
A B
0 1 2
1 1 2
2 2 1
3 3 2
4 3 2
5 4 4
6 4 4
7 4 4
8 4 4
Verwandte Fragen
Verknüpfte Fragen
Neue Fragen
python
Python ist eine dynamisch typisierte Mehrzweck-Programmiersprache mit mehreren Paradigmen. Es wurde entwickelt, um schnell zu lernen, zu verstehen, zu verwenden und eine saubere und einheitliche Syntax durchzusetzen. Bitte beachten Sie, dass Python 2 ab dem 01.01.2020 offiziell nicht mehr unterstützt wird. Fügen Sie für versionenspezifische Python-Fragen das Tag [python-2.7] oder [python-3.x] hinzu. Wenn Sie eine Python-Variante (z. B. Jython, PyPy) oder eine Bibliothek (z. B. Pandas und NumPy) verwenden, fügen Sie diese bitte in die Tags ein.