我得到了这个数据框,并想添加一列以指示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():
但是我很确定有更快更容易的可能性。
答案 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时,客户是固定的。