Ich habe einen Datenrahmen:Wie beschriftet man doppelte Gruppen in Pandas?
>>> df
A
0 foo
1 bar
2 foo
3 baz
4 foo
5 bar
ich alle doppelten Gruppen finden müssen und sie mit sequentieller dgroup_id
‚s Label:
>>> df
A dgroup_id
0 foo 1
1 bar 2
2 foo 1
3 baz
4 foo 1
5 bar 2
(Das bedeutet, dass foo
zu der ersten Gruppe von Duplikaten gehört , bar
zur zweiten Gruppe von Duplikaten und baz
nicht dupliziert)
ich dies tat.
import pandas as pd
df = pd.DataFrame({'A': ('foo', 'bar', 'foo', 'baz', 'foo', 'bar')})
duplicates = df.groupby('A').size()
duplicates = duplicates[duplicates>1]
# Yes, this is ugly, but I didn't know how to do it otherwise:
duplicates[duplicates.reset_index().index] = duplicates.reset_index().index
df.insert(1, 'dgroup_id', df['A'].map(duplicates))
Dies führt zu:
>>> df
A dgroup_id
0 foo 1.0
1 bar 0.0
2 foo 1.0
3 baz NaN
4 foo 1.0
5 bar 0.0
Gibt es einen einfacheren/kürzeren Weg, dies in Pandas zu erreichen? Ich habe gelesen, dass vielleicht pandas.factorize
könnte hier helfen, aber ich weiß nicht, wie man es benutzt ... (auf diese Funktion ist keine Hilfe)
Auch: Ich habe nichts dagegen, weder die 0- basierte Gruppenzahl, noch die seltsame Sortierreihenfolge; aber ich hätte gerne die dgroup_id
's als ints, nicht schwimmt.
nicht sicher, aber wie wäre es versucht, '(duplicates.reset_index() .index) .asyp (int) '? –