用它们的计数替换 DataFrame 列中的唯一值

Replace the unique values in a DataFrame column with their count

我有一个这样的 DataFrame:

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

最好的方法是什么? 谢谢!

使用map by Series created by value_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

使用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

如果您的列没有 NaNs,sizecount return 相同的值。否则,size 包含 NaNs,所以避免使用它。


使用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