Python Pandas:如何将另一列分组的列上具有最大值\u count的行作为数据帧
熊猫数据框中有三列,Python Pandas:如何将另一列分组的列上具有最大值\u count的行作为数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,熊猫数据框中有三列,日期,小时和内容我想获取一天中内容最多的时间。我使用的是messages.groupby([“Date”,“hour”]).content.count().groupby(level=0)。tail(1)。我不知道groupby(level=0)在这里做什么。它的输出如下- Date Hour 2018-04-12 23 4 2018-04-13 21 43 2018-04-14 9 1 2018-04-15 23
日期
,小时
和内容
我想获取一天中内容最多的时间。我使用的是messages.groupby([“Date”,“hour”]).content.count().groupby(level=0)。tail(1)
。我不知道groupby(level=0)在这里做什么。它的输出如下-
Date Hour
2018-04-12 23 4
2018-04-13 21 43
2018-04-14 9 1
2018-04-15 23 29
2018-04-16 17 1
..
2020-04-23 20 1
2020-04-24 22 1
2020-04-25 20 1
2020-04-26 23 32
2020-04-27 23 3
这是一个pandas系列对象,我想要的Date
和Hour
列在这里。如果我尝试使用pd.dataframe(most\u active.index)
将MultiIndex
对象转换为dataframe,most\u active
是前一个代码的输出,它会创建一个元组的dataframe,如下所示-
0
0 (2018-04-12, 23)
1 (2018-04-13, 21)
2 (2018-04-14, 9)
3 (2018-04-15, 23)
4 (2018-04-16, 17)
.. ...
701 (2020-04-23, 20)
702 (2020-04-24, 22)
703 (2020-04-25, 20)
704 (2020-04-26, 23)
705 (2020-04-27, 23)
但是我需要两个独立的列
日期
和小时
。最好的方法是什么?编辑,因为我误解了你的问题
首先,您必须按日期小时统计总内容,就像您所做的那样:
df = messages.groupby(["Date", "Hour"], as_index=False).Content.count()
在这里,我通过将参数传递为_index=False
将组保留在其原始列中
然后,您可以运行原始答案中提供的以下代码:
假设您有唯一的索引ID(如果没有,只需执行df.reset\u index(inplace=True)
),您可以在groupby
中使用idxmax
方法。它将返回每个组具有最大值的索引,然后您可以使用它们对数据帧进行切片
例如:
df.loc[df.groupby(['Date', 'Hour'])['Content'].idxmax()]
或者(不使用groupby),您可以先按降序对值进行排序,然后删除重复的日期小时数:
df.sort_values('Content', ascending=False).drop_duplicates(subset=['Date', 'Hour'])
最后,使用set\u index()
方法得到一个MultiIndex
:
df.set_index(['Date','Hour'])
我很感谢您的帮助,但这两种方法都没有达到预期效果,您的第二个代码尝试按
内容
进行排序,这是一个字符串字段,第一个代码给出一个值错误
,除此之外什么都没有。也许我的问题没有说清楚,其实我误解了你的问题。我已经编辑了答案,添加了第一个块来获取计数(就像您所做的那样),然后添加了最后一个块来获取多索引。请让我知道它是否有效。如果您没有在groupby
方法中提供列名,则必须为level
参数提供一个值,该参数是数据帧索引的级别。如果您像以前那样编写代码(level=0
),我认为您将只按日期分组,一旦您有了一个日期为0级的多索引数据框。此外,如果要在groupby中运行tail(1)
,请确保首先对值进行排序()。