1

特定の列に特定の値が複数出現するデータフレームがあります。新しい列に何らかの参照を追加して、これらの値を一意に設定したいと考えています。たとえば、ID 列を持つデータフレームがあるとします。

          ID
7     2035200584
8     2035200584
9     2035200584
31    2038128459
32    2038128459
33    2038128459
42    2053561908
43    2053561908
44    2053561908

そして、次のような「newID」という新しい列を作成したいと思います。

          ID
7     2035200584_1
8     2035200584_2
9     2035200584_3
31    2038128459_1
32    2038128459_2
33    2038128459_3
42    2053561908_1
43    2053561908_2
44    2053561908_3

groupby メカニズムを使用しようとしましたが、成功しませんでした。単純な適用メカニズムを使用しても問題ありませんが、少し面倒です (各 ID の出現回数を含む辞書を保持する必要があります)。

私が見逃していることを行うための簡単で効率的な方法はありますか?

4

1 に答える 1

3

DSM のソリューションのわずかなバリエーションを次に示します。

import pandas as pd
import io

content = io.BytesIO('''index ID
7     2035200584
8     2035200584
9     2035200584
31    2038128459
32    2038128459
33    2038128459
42    2053561908
43    2053561908
44    2053561908''')

df = pd.read_table(content, sep='\s+', header=0)

df['ID'] = df.groupby('ID')['ID'].transform(
    lambda x: map('{:.0f}_{:.0f}'.format, x, x.rank('first')))

print(df)

収量

   index            ID
0      7  2035200584_1
1      8  2035200584_2
2      9  2035200584_3
3     31  2038128459_1
4     32  2038128459_2
5     33  2038128459_3
6     42  2053561908_1
7     43  2053561908_2
8     44  2053561908_3
于 2013-10-13T14:21:53.263 に答える