我已经生成了一个表格,显示了我的数据集的模式值。 数据集最初按“日期”,“小时”和“房间”分组,以便能够获得步行交通的模式值。 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的room2的有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
要回答Conner的请求,请参阅下面的原始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
如果有人知道如何通过每个组并且只保留最大模式值,如果有几个我会非常感激。
感谢您的时间!
-Romain
答案 0 :(得分:1)
我在找这样的东西。仅供参考,您可以使用def str1="My application version is $app_version"
def str2 = str1.replaceAll('$app_version','2016072601')
println str2
df.head(n=10).to_csv(path, index=False)
(下面我使用等效代码更简洁)
这会为您提供room,time,capacity,areaName,hour,date,traffic
room1,Mon Nov 02 09:00:00,40,area01,9,2,14
room1,Mon Nov 02 09:05:00,40,area01,9,2,15
room1,Mon Nov 02 09:10:00,80,area01,9,2,23
room1,Mon Nov 02 09:15:00,80,area01,9,2,23
room2,Mon Nov 02 11:00:00,40,area03,11,2,67
room2,Mon Nov 02 11:50:00,80,area03,11,2,64
room2,Mon Nov 02 11:10:00,40,area03,11,2,72
对象
groupby
事实证明,与
df = df.groupby(['date', 'hour', 'room'])
,mean
,max
,median
和min
不同,{{1}没有mad
方法对象!
一旦你完成了这个
mode
您可以重置索引并重新组合以应用每组GroupBy
:
df = dataframe['traffic'].apply(lambda x: x.mode())