Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python kaggle数据事务分析_Python_Pandas_Dataframe_Data Analysis - Fatal编程技术网

Python kaggle数据事务分析

Python kaggle数据事务分析,python,pandas,dataframe,data-analysis,Python,Pandas,Dataframe,Data Analysis,kaggle数据事务分析部分答案 据我所知,您已经有了一个列每日时间和一个列项目 因此,假设具有相同列的虚拟数据帧: In[]: df = pd.DataFrame({'Time_Of_Day': ['breakfast', 'breakfast', 'breakfast', 'lunch', 'lunch', 'lunch'], 'item': ['coffee', 'coffee', 'bread', 'pastry', 'pastry', 'coffee']}) In[]: df Out[

kaggle数据事务分析

部分答案

据我所知,您已经有了一个列
每日时间
和一个列
项目

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

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
列现在为您提供一天中同一时间内项目的位置。所以在这里,
面包
早餐
(排名第一)期间销售最多,
咖啡
午餐
期间销售最多

您可以按排名进行排序,以获得最畅销的商品:

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
,也无需将整个底层数据存储在内存中。根据口味调整输出的格式

导入heapq
导入系统
销售额={}
类别销售:
@静力学方法
定义每天的时间(tm):
hr=int(tm.split(“:”)[0])
如果hr在范围(6,11)内:
返回“早餐”
如果hr在范围(11,15)内:
返回“午餐”
如果hr在范围(15,20)内:
返回“晚餐”
返回“麦奇”
定义初始化(自身,行):
dt,tm,txn,item=line.rstrip().split(“,”)
self.dt=dt
self.tm=tm
self.txn=txn
self.item=item.lower()
self.time\u of_day=Sale.time\u of_day(self.tm)
def可跳过(项目):
返回(项目=='adjustment')或(项目=='none')
def加载单元销售(fh):
#箕斗式掘进机
fh.readline()
销售额={
“早餐”:{},
“午餐”:{},
‘晚餐’:{},
“麦奇”:{},
}
对于fh中的线路:
销售=销售(行)
如果可跳过(销售项目):
持续
项目=销售。项目
tod=每天的销售时间
销售[tod][item]=销售[tod]。获取(item,0)+1
退货
def main():
销售=加载\销售(系统标准)
sep=“==================================”
对于销售中的tod:
top10=heapq.nlargest(10,销售[tod].items(),key=lambda x:x[1])
打印(tod)
印刷(九月)
打印(“\n”.join(列表(映射(lambda x::\t).join([x[0],str(x[1])),top10)))
打印(sep,“\n\n”)
main()
样本输出:

breakfast
====================
coffee: 1615
bread:  1081
pastry: 453
medialuna:      294
tea:    280
toast:  149
hot chocolate:  141
farm house:     132
cake:   131
cookies:        128
====================


lunch
====================
coffee: 2929
bread:  1683
tea:    773
sandwich:       620
cake:   566
pastry: 345
soup:   281
hot chocolate:  266
cookies:        255
medialuna:      247
====================


dinner
====================
coffee: 926
bread:  560
tea:    382
cake:   328
hot chocolate:  181
cookies:        157
alfajores:      128
sandwich:       109
brownie:        99
juice:  84
====================


munchies
====================
postcard:       7
vegan feast:    7
tshirt: 5
pintxos:        4
hot chocolate:  2
valentine's card:       2
dulce de leche: 1
fudge:  1
vegan mincepie: 1
coke:   1
====================

是的,为了获得所需的输出格式,当每个具有相同索引的组排名为0~9时,可能会使用set_index、unstack和swaplevel。非常感谢您的关注和帮助,先生。我想显示我已经添加了我编写的代码,如表中所示。好的,一旦您获得了所需的信息,您可以按任何方式打印它。但是,我要注意的是,您的显示器显示前10名中的“无”项,并将整数显示为浮点数。