如何筛选DataFrame中出现次数超过3次的客户详情?
获取高频客户的详细记录
要拿到出现次数超过3次的客户的所有行数据,不用纠结groupby().count()>3的布尔结果,直接用下面两种方法就能搞定:
方法一:先筛客户再过滤数据
- 先用
value_counts()统计每个客户的出现次数,挑出次数>3的客户 - 用
isin()在原DataFrame里匹配这些客户,得到他们的所有记录
import pandas as pd # 你的示例DataFrame df = pd.DataFrame({ 'id':[1,2,3,4,5,6,7,8,9,10], 'customer':['a','b','c','b','b','b','d','e','e','f'], 'address':['xx','yy','rr','yy','oo','ee','vv','zz','nn','cc'] }) # 筛选出现次数>3的客户 top_customers = df['customer'].value_counts()[lambda x: x > 3].index # 提取这些客户的所有记录 result = df[df['customer'].isin(top_customers)] print(result)
输出结果:
id customer address 1 2 b yy 3 4 b yy 4 5 b oo 5 6 b ee
方法二:用transform直接标记每行的客户次数
这种方法不用单独提取客户名单,直接给每行加上对应客户的出现次数,再过滤:
# 给每行添加对应customer的出现次数 df['customer_count'] = df.groupby('customer')['id'].transform('count') # 筛选次数>3的行,最后删掉临时列 result = df[df['customer_count'] > 3].drop(columns='customer_count') print(result)
得到的结果和方法一完全一致,适合不想额外生成客户列表的场景。
内容的提问来源于stack exchange,提问作者Bhushan Deshmukh
相关产品推荐
相关产品推荐

