数据框根据其他列找出该列中的重复值,然后在其中添加标签

给出以下数据框:

 import pandas as pd
 d=pd.DataFrame({'ID':[1,1,2,2],'values':['a','b','a','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 

非常感谢您!!!!!!!!!!!!!!!!!!!!!!

fql920011429 回答:数据框根据其他列找出该列中的重复值,然后在其中添加标签

似乎您需要transform count + 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
,

您要按IDvalues分组。在每个组中,您对两件事感兴趣:组中的成员数(count)和组中的出现率(order):

df['order'] = df.groupby(['ID','values']).cumcount() + 1
df['count'] = df.groupby(['ID','values']).transform('count')

然后可以使用values将它们的字符串值与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
本文链接:https://www.f2er.com/3070392.html

大家都在问