我在python和pandas数据框方面遇到了一些小问题。 我想制作一个包含一些相关项目的数据透视表。 我有一个具有这种结构的数据框。
+-----+------------+-----------+-----------+
| ID | Item_Type | Basket_ID | OwnerName |
+-----+------------+-----------+-----------+
| 3 | Basket | | |
| 336 | ChickenEgg | 3 | Henk |
| 841 | SomeEgg | 3 | Henk |
| 671 | EasterEgg | 3 | Piet |
| 9 | Basket | | |
| 336 | Orange | 9 | Piet |
| 841 | Banana | 9 | Piet |
| 671 | Strawberry | 9 | Herman |
| 888 | Apple | 9 | Herman |
| 821 | Apricots | 9 | NaN |
+-----+------------+-----------+-----------+
我想计算与“购物篮”项目(父项)相关的项目有多少,以及“所有者名称”与相关的“购物篮”项目出现的频率。
我希望我的数据框如下所示。 您可以从与父级Item_Type“购物篮”相关的商品中查看商品总数,以及该商品名称出现的频率。 您还可以查看有多少个“总计所有者”,以及没有所有者的项目。
+----+-----------+-------------------+------------+------------+--------------+--------------+------------------+
| ID | Item_Type | Total_Items_Count | Henk_Count | Piet_Count | Herman_Count | Total_Owners | Total_NaN_Values |
+----+-----------+-------------------+------------+------------+--------------+--------------+------------------+
| 3 | Basket | 3 | 2 | 1 | 0 | 3 | |
| 9 | Basket | 5 | 0 | 2 | 2 | 4 | 1 |
+----+-----------+-------------------+------------+------------+--------------+--------------+------------------+
答案 0 :(得分:0)
回答问题需要多个步骤,但核心思想是您应该使用数据透视表。
表在概念上是一个多级索引。购物篮ID是高级索引,“ ID”是更详细的索引。您要做的第一件事是删除缺少basket_id的行,以使表的粒度保持一致。
假设您将数据框命名为df。
# Preparation steps
df = df[~df["Basket_ID"].isna()] # Remove the rows that shouldnt be counted.
df.loc[df["OwnerName"].isna(),"OwnerName"] = "unknown" # set missing to arbitrary value
# Make a pivot table
df = df.pivot_table(index=['Basket_ID'],columns=['OwnerName'],values=['Item_Type'],aggfunc='count').fillna(0)
从那里开始,您应该能够计算剩余的列