2017-09-23 14 views
1

でデータフレームの列に一意の値を置き換えます。は、このような私は、データフレームを持っている彼らの数

Index Label 
0  ABCD 
1  EFGH 
2  ABCD 
3  ABCD 
4  EFGH 
5  ABCD 
6  IJKL 
7  IJKL 
8  ABCD 
9  EFGH 

ので、「ABCD」は二回5回、「EFGH」3回と「IJKL」を発生します。

Index Label 
0  5 
1  3 
2  5 
3  5 
4  3 
5  5 
6  2 
7  2 
8  5 
9  3 

これを行うには素敵な方法は何です:私は、次の取得するには、各ラベルの発生をカウントし、そのカウントは個々のラベルを交換したいですか? ありがとうございました! Seriesによって

答えて

2

使用mapvalue_counts作成者:

df['Label'] = df['Label'].map(df['Label'].value_counts()) 
print (df) 
    Label 
0  5 
1  3 
2  5 
3  5 
4  3 
5  5 
6  2 
7  2 
8  5 
9  3 

transform + sizeのもう一つの解決策:

df['Label'] = df.groupby('Label')['Label'].transform('size') 
print (df) 

    Label 
0  5 
1  3 
2  5 
3  5 
4  3 
5  5 
6  2 
7  2 
8  5 
9  3 
+0

'size'はNaNを含み、そして間違っています。 –

+0

本当ですか?私はいつも必要とされていると思う 'size'と必要な場合は' NaNの必要性を除外 'カウント'(珍しい使用) – jezrael

+0

"要素をカウントで置き換える"ので、ナンバーカウントではありません。 groupbyのナンはどうなるの? (私は知らないので、私は尋ねる) –

1

使用groupbytransform

print(df) 
     Label 
Index  
0  ABCD 
1  EFGH 
2  ABCD 
3  ABCD 
4  EFGH 
5  ABCD 
6  IJKL 
7  IJKL 
8  ABCD 
9  EFGH 

df['Label'] = df.groupby('Label').Label.transform('count') 
print(df) 
     Label 
Index  
0   5 
1   3 
2   5 
3   5 
4   3 
5   5 
6   2 
7   2 
8   5 
9   3 

列にNaNがない場合、sizecountは同じ値を返します。それ以外の場合、sizeにはNaNが含まれているため、使用しないでください。


Counterを使用して別の方法:

from collections import Counter 

df['Label'] = df.Label.map(Counter(df.Label)) 
print(df) 
     Label 
Index  
0   5 
1   3 
2   5 
3   5 
4   3 
5   5 
6   2 
7   2 
8   5 
9   3 
+0

@ P.Prunesquallor upvoteありがとう。 –

+1

@ P.Prunesquallorまた、groupbyソリューションを使用している場合は、jezraelのソリューションにあるように 'size'を使用しないでください。 –

+0

私は理解していません。そうでなければ、サイズにはNaNが含まれていますので、使用しないでください。私は両方の関数がいいと思う - そして、関数 'count'は、NaNを明示的に除外する必要がある場合にのみ、使用されない方が良いと思います。私はいくつかのNaNがあることを知っていれば良いので、sizeを使うのは避けるべき理由がないと思います。(特にNaNはデータにないと思います。 – jezrael

関連する問題