Python 3.x Dataframe根据其他列查找列中的重复值,然后向其中添加标签

Python 3.x Dataframe根据其他列查找列中的重复值,然后向其中添加标签,python-3.x,pandas,duplicates,conditional-statements,unique,Python 3.x,Pandas,Duplicates,Conditional Statements,Unique,给定以下数据帧: import pandas as pd d=pd.DataFrame({'ID':[1,1,1,1,2,2,2,2], 'values':['a','b','a','a','a','a','b','b']}) d ID values 0 1 a 1 1 b 2 1 a 3 1 a 4 2 a 5 2 a 6 2 b 7 2 b

给定以下数据帧:

 import pandas as pd
 d=pd.DataFrame({'ID':[1,1,1,1,2,2,2,2],
           'values':['a','b','a','a','a','a','b','b']})
 d
    ID  values
 0   1    a 
 1   1    b 
 2   1    a 
 3   1    a 
 4   2    a 
 5   2    a 
 6   2    b 
 7   2    b 
我想得到的数据是:

    ID  values count label(values + ID)
 0   1    a      3     a11 
 1   1    b      1     b11 
 2   1    a      3     a12 
 3   1    a      3     a13 
 4   2    a      2     a21 
 5   2    a      2     a22 
 6   2    b      2     b21  
 7   2    b      2     b22 

非常感谢!谢谢

似乎您需要
转换
计数
+
计数

d['count']=d.groupby(['ID','values'])['values'].transform('count')
d['label']=d['values']+d.ID.astype(str)+d.groupby(['ID','values']).cumcount().add(1).astype(str)
d
Out[511]: 
   ID values  count label
0   1      a      3   a11
1   1      b      1   b11
2   1      a      3   a12
3   1      a      3   a13
4   2      a      2   a21
5   2      a      2   a22
6   2      b      2   b21
7   2      b      2   b22

似乎您需要
转换
计数
+
cumcount

d['count']=d.groupby(['ID','values'])['values'].transform('count')
d['label']=d['values']+d.ID.astype(str)+d.groupby(['ID','values']).cumcount().add(1).astype(str)
d
Out[511]: 
   ID values  count label
0   1      a      3   a11
1   1      b      1   b11
2   1      a      3   a12
3   1      a      3   a13
4   2      a      2   a21
5   2      a      2   a22
6   2      b      2   b21
7   2      b      2   b22

您想按
ID
值进行分组。在每个组中,您感兴趣的是两件事:组中成员的数量(
count
)和组中出现的次数(
order
):

然后,您可以使用
sum
将它们的字符串值与
值连接起来:

df['label'] = df[['values', 'ID', 'order']].astype(str).sum(axis=1)
这导致:

   ID values  order  count label
0   1      a      1      3   a11
1   1      b      1      1   b11
2   1      a      2      3   a12
3   1      a      3      3   a13
4   2      a      1      2   a21
5   2      a      2      2   a22
6   2      b      1      2   b21
7   2      b      2      2   b22

您想按
ID
值进行分组。在每个组中,您感兴趣的是两件事:组中成员的数量(
count
)和组中出现的次数(
order
):

然后,您可以使用
sum
将它们的字符串值与
值连接起来:

df['label'] = df[['values', 'ID', 'order']].astype(str).sum(axis=1)
这导致:

   ID values  order  count label
0   1      a      1      3   a11
1   1      b      1      1   b11
2   1      a      2      3   a12
3   1      a      3      3   a13
4   2      a      1      2   a21
5   2      a      2      2   a22
6   2      b      1      2   b21
7   2      b      2      2   b22

如何实现这样的功能?非常感谢你!!!如何实现这样的功能?非常感谢你!!!