gpt4 book ai didi

python - 使用 groupby 获取每组的最大众数

转载 作者:太空宇宙 更新时间:2023-11-03 16:19:50 24 4
gpt4 key购买 nike

我生成了一个显示数据集众数的表格。该数据集最初按“日期”、“小时”和“房间”分组,以便能够获得人流量的众数。groupby 执行如下:

dataframe = df.groupby([df['date'], df['hour'], df['room']])

然后我通过以下方式生成了每个组的“流量”模式值:

dataframe = dataframe['traffic'].apply(lambda x: x.mode())

因此,我的数据框显示了正确的组并显示了每个房间、每小时和每天的模态值。我的问题是,在某些情况下,模态值的数量超过 1(因为 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

如果有人知道一种方法来遍历每个组并且仅在有多个组时保留最大模式值,我将不胜感激。

感谢您的宝贵时间!

-罗曼

最佳答案

我一直在寻找这样的东西。仅供引用,您可以通过 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'])

It turns out, unlike mean, max, median, min and madthere is no mode method for GroupBy objects!

完成此操作后

df = dataframe['traffic'].apply(lambda x: x.mode())

您可以重置索引并重新分组以应用 max每组:

df = df.reset_index()
df = df.groupby(['date', 'hour', 'room']).max()

关于python - 使用 groupby 获取每组的最大众数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38594027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com