私はデータフレームを持っている:パンダの重複グループにラベルを付けるには?
>>> df
A
0 foo
1 bar
2 foo
3 baz
4 foo
5 bar
私はすべての重複グループを検索し、シーケンシャルdgroup_id
年代でそれらをラベル付けする必要があります。
>>> df
A dgroup_id
0 foo 1
1 bar 2
2 foo 1
3 baz
4 foo 1
5 bar 2
(これはfoo
は重複の最初のグループに属することを意味、bar
を第2の重複グループに割り当て、baz
は重複しません)。
これを実行しました:
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))
これはにつながる:
>>> 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
パンダでこれを達成するためのシンプルな/短い方法はありますか?私はおそらくpandas.factorize
がここに助けになるかもしれないことを読んだが、私はそれを使用する方法がわからない...(pandas documentationはこの機能には役に立たない)
また、奇妙な並べ替え順もありません。私はdgroup_id
を浮動小数点数ではなくintとして使用したいと考えています。
わからないが、どのように( 'duplicates.reset_indexをしようとしてについて().index).astype(int) '? –