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

Dou*_*alu 8 python pandas

我有一个这样的数据框:

IP_address
   IP1
   IP1
   IP1
   IP4
   IP4
   IP4
   IP4
   IP4
   IP7
   IP7
   IP7
Run Code Online (Sandbox Code Playgroud)

我想在此列中计算唯一值,并将计数作为变量添加.最后,它应该是这样的:

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
Run Code Online (Sandbox Code Playgroud)

我可以使用以下代码获取列的唯一值:

unique_ip_address_count = (df_c_train.drop_duplicates().IP_address.value_counts()).to_dict()
Run Code Online (Sandbox Code Playgroud)

但是,我不确定如何在python循环中匹配这些,以便我可以在python中获得所需的结果.非常感谢任何形式的帮助.

我无法在stackoverflow中找到相应的答案.如果有什么请指导我.谢谢.

Vai*_*ali 10

您可以将value_counts()与map结合使用

df['count'] = df['IP_address'].map(df['IP_address'].value_counts())


    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
Run Code Online (Sandbox Code Playgroud)


piR*_*red 9

使用pd.factorize
这应该是一个非常快速的解决方案,可以很好地扩展大数据

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
Run Code Online (Sandbox Code Playgroud)


Div*_*kar 8

NumPy方式 -

tags, C = np.unique(df.IP_address, return_counts=1, return_inverse=1)[1:]
df['IP_address_Count'] = C[tags]
Run Code Online (Sandbox Code Playgroud)

样品输出 -

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
Run Code Online (Sandbox Code Playgroud)


Max*_*axU 7

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
Run Code Online (Sandbox Code Playgroud)