Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.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 Pandas:如何将另一列分组的列上具有最大值\u count的行作为数据帧_Python_Pandas_Dataframe - Fatal编程技术网

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)
,请确保首先对值进行
排序()。