pandas 有没有办法让我的输出按唯一的用户ID组织?

jxct1oxe  于 2023-03-21  发布在  其他
关注(0)|答案(1)|浏览(134)

我有一个庞大的数据库(练习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

xmakbtuz

xmakbtuz1#

由于您既没有提供任何示例数据,也没有提供所需输出的良好示例,因此很难确切确定您需要什么。以下是一种选择已进行涉及宠物部门的采购的唯一Cust_ID的方法。
给定以下形式的dF:

Cust_ID Purch_Date  Dept
0   4817    2022-05-26  Pets
1   3013    2022-01-12  Pets
2   3013    2022-12-22  Hardware
3   4550    2022-04-21  Pets
4   4817    2022-12-26  Hardware

您可以获取唯一cust_id的列表,如下所示:

list(df[df["Dept"] == 'Pets']['Cust_ID'].unique())

这将生成一个仅包含满足部门包含“宠物”条件的cust_id的列表,如下所示:]

[4817, 3013, 4550]

相关问题