如何在python中为数据帧中的记录分配唯一值的计数

如何在python中为数据帧中的记录分配唯一值的计数,python,pandas,Python,Pandas,我有这样一个数据框: IP_address IP1 IP1 IP1 IP4 IP4 IP4 IP4 IP4 IP7 IP7 IP7 IP_address IP_address_Count IP1 3 IP1 3 IP1 3 IP4 5 IP4 5 IP4

我有这样一个数据框:

IP_address
   IP1
   IP1
   IP1
   IP4
   IP4
   IP4
   IP4
   IP4
   IP7
   IP7
   IP7
IP_address  IP_address_Count
   IP1               3
   IP1               3
   IP1               3
   IP4               5
   IP4               5
   IP4               5
   IP4               5
   IP4               5
   IP7               3
   IP7               3
   IP7               3
我想在此列中计算唯一值的计数,并将计数本身添加为一个变量。最后,它应该是这样的:

IP_address
   IP1
   IP1
   IP1
   IP4
   IP4
   IP4
   IP4
   IP4
   IP7
   IP7
   IP7
IP_address  IP_address_Count
   IP1               3
   IP1               3
   IP1               3
   IP4               5
   IP4               5
   IP4               5
   IP4               5
   IP4               5
   IP7               3
   IP7               3
   IP7               3
我可以使用以下代码获取列的唯一值:

unique_ip_address_count = (df_c_train.drop_duplicates().IP_address.value_counts()).to_dict()
但是,我不知道如何在python中的循环中匹配这些,以便在python中获得所需的结果。非常感谢任何形式的帮助

我在stackoverflow中找不到同等的答案。如果有什么事,请告诉我。多谢各位

NumPy路-

In [75]: df['IP_address_Count'] = df.groupby('IP_address')['IP_address'].transform('size')

In [76]: df
Out[76]:
   IP_address  IP_address_Count
0         IP1                 3
1         IP1                 3
2         IP1                 3
3         IP4                 5
4         IP4                 5
5         IP4                 5
6         IP4                 5
7         IP4                 5
8         IP7                 3
9         IP7                 3
10        IP7                 3
tags, C = np.unique(df.IP_address, return_counts=1, return_inverse=1)[1:]
df['IP_address_Count'] = C[tags]
样本输出-

In [275]: df
Out[275]: 
   IP_address  IP_address_Count
0         IP1                 3
1         IP1                 3
2         IP1                 3
3         IP4                 5
4         IP4                 5
5         IP4                 5
6         IP4                 5
7         IP4                 5
8         IP7                 3
9         IP7                 3
10        IP7                 3
您可以将value_counts()与映射一起使用

这似乎给了我你想要的那种输出


编辑:Vaishali使用pd.factorize对map的使用是完美的 这应该是一个非常快速的解决方案,可以很好地扩展大数据

f, u = pd.factorize(df.IP_address.values)
df.assign(IP_address_Count=np.bincount(f)[f])

   IP_address  IP_address_Count
0         IP1                 3
1         IP1                 3
2         IP1                 3
3         IP4                 5
4         IP4                 5
5         IP4                 5
6         IP4                 5
7         IP4                 5
8         IP7                 3
9         IP7                 3
10        IP7                 3

与我的解决方案相比,我更喜欢你的解决方案……:)@瓦伊沙利-我有一个问题。结果值是一个浮点值。我应该在这里做一些东西来转换成整数,还是应该把它作为一个单独的代码?不应该。当我尝试df.dtypes时,我得到了IP_地址对象,count int64oh,好的,我得到了float64。@Vaishali-float64是因为内部数据问题。非常感谢你的帮助。是的,很快。。目前,我正在使用此方法进行计数唯一;-)