列が重複していて、別の列の値が重複している場合、列を一意にしようとしています。このデータセット。
Name Age
0 Tom 20
1 Tom 20
2 Jack 19
3 Terry 18
4 Terry 20
テリーがTerry_1とTerry_2になり、テリーが1つ以上あり、年齢が一致しない場合は、トムを同じままにしたいと思います。以下のコードを試してみました。
import pandas as pd
import numpy as np
data = {'Name':['Tom', 'Tom', 'Jack', 'Terry','Terry'], 'Age':[20, 20, 19, 18,20]}
df = pd.DataFrame(data)
df.Name=df.Name+df.groupby(['Name','Age']).cumcount().astype(str)
私が得るものは:
Name Age
0 Tom0 20
1 Tom1 20
2 Jack0 19
3 Terry0 18
4 Terry0 20
私が欲しいのは:
Name Age
0 Tom 20
1 Tom 20
2 Jack 19
3 Terry_1 18
4 Terry_2 20
トムの年齢は同じなので、トムは同じですが、テリーは年齢によって異なります。
ありがとう、サム
これはtransform
and factorize
で実行できます。次に、nunique
s=df.groupby('Name').Age
df['New']=(df.Name+'_'+s.transform(lambda x : (x.factorize()[0]+1)).astype(str)).\
mask(s.transform('nunique')==1,df.Name)
df
Out[230]:
Name Age New
0 Tom 20 Tom
1 Tom 20 Tom
2 Jack 19 Jack
3 Terry 18 Terry_1
4 Terry 20 Terry_2
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加