我有一个庞大的数据库(练习Instacart数据)我正在用Python pandas工作,我试图创建客户概要信息,但是刚刚意识到这个集合包含了超过3200万行(是唯一订单),但只有206,000个唯一客户。例如,我想通过在部门列中查找指示“宠物”的条目来为宠物主人创建一个配置文件。我想回答的问题是:对于每个唯一的user_id,他们是否从宠物部门订购?(部门是其中一列)
回复者提供的示例数据集非常棒,所以我将其粘贴到此处:
Cust_ID Purch_Date Dept
0 4817 2022-05-26宠物1 3013 2022-01-12宠物2 3013 2022-12-22硬件3 4550 2022-04-21宠物4 4817 2022-12-26硬件
我需要能够使用结果运行value_counts()函数,该结果表示购买宠物产品的唯一Cust_ID的数量。
我是这样开始的:
df.loc[df['department'] == 'pets', 'pet_owner'] = 'Yes'
df.loc[df['department'] != 'pets', 'pet_owner'] = 'No'
然后我意识到分析问题,只看有多少订单包括宠物项目,而不是有多少独特的客户作出了订单包括宠物项目。
然后我尝试了这个,这是我抓住救命稻草,因为我是一个Python新手:
d1 = df.groupby('user_id')
d1.loc[(d1['department'] == 'pets') or (d1['department'] == 'babies'), 'pets_babies'] = 'Both'
这是我得到的错误:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/var/folders/l0/y75wbnrd7r91nshng87h2x0m0000gn/T/ipykernel_44701/3715509093.py in <module>
----> 1 d1.loc[(d1['department'] == 'pets') or (d1['department'] == 'babies'), 'pets_babies'] = 'Both'
~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/groupby/groupby.py in __getattr__(self, attr)
902 return self[attr]
903
--> 904 raise AttributeError(
905 f"'{type(self).__name__}' object has no attribute '{attr}'"
906 )
AttributeError: 'DataFrameGroupBy' object has no attribute 'loc'
任何人都可以请帮我弄清楚如何获得信息的方式,我需要?TIA
1条答案
按热度按时间xmakbtuz1#
由于您既没有提供任何示例数据,也没有提供所需输出的良好示例,因此很难确切确定您需要什么。以下是一种选择已进行涉及宠物部门的采购的唯一Cust_ID的方法。
给定以下形式的dF:
您可以获取唯一cust_id的列表,如下所示:
这将生成一个仅包含满足部门包含“宠物”条件的cust_id的列表,如下所示:]