【发布时间】:2016-11-30 08:19:06
【问题描述】:
我生成了一个表格,其中显示了我的数据集的众数值。 数据集最初按“日期”、“小时”和“房间”分组,以便能够获得人流量的众数值。 groupby的执行如下:
dataframe = df.groupby([df['date'], df['hour'], df['room']])
然后我通过以下方式为每个组的“流量”生成模式值:
dataframe = dataframe['traffic'].apply(lambda x: x.mode())
因此,我的数据框显示了正确的组,并显示了每个房间、每小时和每天的模态值。 我的问题是,在某些情况下,模态值的数量不止一个(因为 2 或 3 个值具有相同数量的观察值)
当前数据框如下所示:
mode
date hour room
6 12 room1 0 15
room2 0 23
1 26
room3 0 1
1 2
13 room2 0 9
1 11
room2 0 15
如上所示,对于 1 月 6 日 12:00 的房间 2,有 2 个模态值(23 和 26)。
我的问题是,理想情况下,我会从有超过 1 个观察值的每个组中删除最低的“模式”值。
我已经研究了几种方法,但无法使其发挥作用。 我在想以下方法会起作用:
dataframe.apply(lambda x: x[dataframe['mode'] == dataframe['mode'].max()])
然后我会删除重复项,但这不会影响数据框..
或
dataframe.filter(lambda x : x[dataframe['mode'] == dataframe['mode'].max()], dataframe['mode'])
这给了我一个“'函数'对象不可迭代”错误
或
for elem in range(0, dataframe.size -1): #to iterate over the daaframe rows
if elem != dataframe['mode'].max(): #to identify rows that aren't max mode value
dataframe = dataframe.drop([elem]) #to drop these rows
要回答康纳的请求,请参阅下面的原始 csv 数据(名为“df”的数据框):
room time capacity areaName hour date traffic
0 room1 Mon Nov 02 09:00:00 40 area01 9 2 14
1 room1 Mon Nov 02 09:05:00 40 area01 9 2 15
2 room1 Mon Nov 02 09:10:00 80 area01 9 2 23
3 room1 Mon Nov 02 09:15:00 80 area01 9 2 23
...
14 room2 Mon Nov 02 11:00:00 40 area03 11 2 67
15 room2 Mon Nov 02 11:50:00 80 area03 11 2 64
16 room2 Mon Nov 02 11:10:00 40 area03 11 2 72
如果有人知道通过每个组的方法,并且只有在有多个组时才保持最大模式值,我将不胜感激。
感谢您的宝贵时间!
-罗曼
【问题讨论】:
标签: python python-3.x pandas dataframe lambda