如何用Pandas按cust_id分组生成升序客户产品列表
解决方案
要生成每个客户按升序排列的产品列表,只需在分组后对产品集合进行排序即可。以下是可行代码:
df_result = df.groupby('cust_id')['product'].apply(lambda x: sorted(x.unique())).reset_index(name='product_list')
代码说明
groupby('cust_id'):按客户ID完成分组lambda x: sorted(x.unique()):对每个分组的产品列先去重(避免同一客户重复购买同一产品的情况),再按字母升序排序,最终生成有序列表reset_index(name='product_list'):重置索引并将结果列命名为product_list
验证结果
运行上述代码后,得到的结果与预期完全一致:
cust_id product_list 0 1 ['phone', 'tv'] 1 2 ['ball', 'bat'] 2 3 ['bat'] 3 4 ['ball', 'bat', 'phone', 'tv'] 4 5 ['tv'] 5 6 ['bat'] 6 7 ['ball', 'bat', 'phone', 'tv'] 7 8 ['phone', 'tv']
问题原因
你之前用unique()或list()生成的列表,仅保留了产品在原DataFrame中的出现顺序,没有做升序排序处理,因此结果不符合要求。通过在apply中加入sorted(),就能实现列表元素的有序排列。
内容的提问来源于stack exchange,提问作者Danish
相关产品推荐
相关产品推荐

