如何标记熊猫数据框中的重复行

时间:2020-07-27 08:37:58

标签: python pandas numpy

我得到了这个数据框,并想添加一列以指示client_id是否存在一次以上。

client     age-group     category
1       <18           basic
1       <18           premium
2       <18           premium
3       <18           premium
4       18-24           basic
5       18-24           basic
6       <18           basic
5       <18           premium
2       <18           basic
7       <18           basic

收件人:

client     age-group     category      regular_client
1       <18           basic            yes
1       <18           premium          yes
2       <18           premium          yes
3       <18           premium          no
4       18-24           basic          no
5       18-24           basic          yes
6       <18           basic            no
5       <18           premium          yes
2       <18           basic            yes
7       <18           basic            no

我知道的唯一方法是

for idx, _ in df.iterrows():

但是我很确定有更快更容易的可能性。

3 个答案:

答案 0 :(得分:1)

使用Series.duplicated + Series.map

df['regular_client'] = df['client'].duplicated(keep=False).map({True:'yes', False:'no'})

Series.duplicated + np.where

df['regular_client'] = np.where(df['client'].duplicated(keep=False), 'yes', 'no')

结果:

   client age-group category regular_client
0       1       <18    basic            yes
1       1       <18  premium            yes
2       2       <18  premium            yes
3       3       <18  premium             no
4       4     18-24    basic             no
5       5     18-24    basic            yes
6       6       <18    basic             no
7       5       <18  premium            yes
8       2       <18    basic            yes
9       7       <18    basic             no

答案 1 :(得分:0)

df.iterrows()并不是一个很好的解决方案,因为那样一来,您只能访问当前行,而您需要检查是否有更多具有相同 client 客户端的行。

使用:

df['regular_client'] = np.where(df.duplicated(subset=['client'], keep=False), 'yes', 'no')

答案 2 :(得分:0)

仅计算客户的出现次数:

df['regular_client'] = df.groupby('x')['x'].transform('count').gt(1).map({True: 'Yes', False: 'No'})

当count大于1时,客户是固定的。