![](/img/trans.png)
[英]How to find the value_count of a specific string in each column of the dataframe
[英]Pandas: how to get the rows that has the maximum value_count on a column grouping by another column as a dataframe
我在 Pandas 数据框中有三列Date
、 Hour
和Content
。 我想获得一天中内容最多的小时。 我正在使用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
这是一个熊猫系列对象,我想要的Date
和Hour
列是MultiIndex
在这里。 如果我尝试使用pd.DataFrame(most_active.index)
将MultiIndex
对象转换为数据帧, most_active
是前一个代码的输出,它会创建一个元组数据帧,如下所示 -
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)
但我需要两列独立的Date
和Hour
。 最好的方法是什么?
编辑因为我误解了你的问题
首先,您必须按日期-小时计算总内容,就像您所做的一样:
df = messages.groupby(["Date", "Hour"], as_index=False).Content.count()
在这里,我通过传递参数as_index=False
将组保留在原始列中。
然后,您可以运行原始答案中提供的以下代码:
假设您有唯一的索引 ID(如果没有,只需执行df.reset_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_index()
方法获得MultiIndex
:
df.set_index(['Date','Hour'])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.