用它们的计数替换 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
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
使用groupby
和transform
:
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
s,size
和 count
return 相同的值。否则,size
包含 NaN
s,所以避免使用它。
使用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
我有一个这样的 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
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
使用groupby
和transform
:
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
s,size
和 count
return 相同的值。否则,size
包含 NaN
s,所以避免使用它。
使用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