首页 > 解决方案 > kaggle数据交易分析

问题描述

kaggle数据交易分析

标签: pythonpandasdataframedata-analysis

解决方案


部分回答

据我所知,您已经有一个 columnTime_Of_Day和一个 column item

因此,假设一个具有相同列的虚拟数据框:

In[]: df = pd.DataFrame({'Time_Of_Day': ['breakfast', 'breakfast', 'breakfast', 'lunch', 'lunch', 'lunch'], 'item': ['coffee', 'coffee', 'bread', 'pastry', 'pastry', 'coffee']})
In[]: df
Out[]:
  Time_Of_Day    item
0   breakfast  coffee
1   breakfast  coffee
2   breakfast   bread
3       lunch  pastry
4       lunch  pastry
5       lunch  coffee

在这种情况下, groupby 会让你非常接近:

In[]: counts = df.groupby(['Time_Of_Day', 'item']).size()
In[]: counts
Out[]:
Time_Of_Day  item  
breakfast    bread     1
             coffee    2
lunch        coffee    1
             pastry    2
dtype: int64

您现在有一个分层索引。您可以像这样获得早餐时出售的面包数量:

In[]: counts['breakfast']['bread']
Out[]: 1

您现在可以找到早餐期间售出的前 10 种商品,例如:

In[]: counts['breakfast'].sort_values(ascending=False)
Out[]: 
item
coffee    2
bread     1
Name: count, dtype: int64

但更有趣的是,您可以使用 pandas函数来计算一天中每个计数rank排名:

In[]: output = pd.DataFrame({'counts': counts})
In[]: output.reset_index(inplace=True)
In[]: output['rank'] = output.groupby('Time_Of_Day')['counts'].rank(method='first')
In[]: output
Out[]:
  Time_Of_Day    item  counts  rank
0   breakfast   bread       1   1.0
1   breakfast  coffee       2   2.0
2       lunch  coffee       1   1.0
3       lunch  pastry       2   2.0

rank列现在为您提供该项目在一天中的同一时间的位置。所以在这里,bread在 期间卖得最多breakfast(它有排名 1)并且coffee在 期间卖得最多lunch

您可以按排名排序以获得销量最高的商品:

In[]: output.sort_values(by='rank')
Out[]:
  Time_Of_Day    item  counts  rank
0   breakfast   bread       1   1.0
2       lunch  coffee       1   1.0
1   breakfast  coffee       2   2.0
3       lunch  pastry       2   2.0

如前所述,这是部分答案。我无法将其完全转换为您要求的格式。它需要使用 pandas 数据帧索引的一些技巧。但我希望这已经有所帮助。


推荐阅读