Python 如何使用groupby-pandas按时间频率计数
我试图使用我的Python 如何使用groupby-pandas按时间频率计数,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我试图使用我的df中的两列来计算每月发生2次事件的频率。到目前为止,我所做的是按唯一时间计算所有事件,这不够有效,因为结果太多了。我希望创建一个带有结果的图表 我已尝试通过以下问题的答案调整代码: [ [ [ 但是当我在groupby命令中输入freq='day'时,似乎无法使命令工作 我的代码是: print(df.groupby(['Priority', 'Create Time']).Priority.count()) 最初产生了大约170000个结果,其结构如下: Priority
df
中的两列来计算每月发生2次事件的频率。到目前为止,我所做的是按唯一时间计算所有事件,这不够有效,因为结果太多了。我希望创建一个带有结果的图表
我已尝试通过以下问题的答案调整代码:
- [
- [
- [
groupby
命令中输入freq='day'
时,似乎无法使命令工作
我的代码是:
print(df.groupby(['Priority', 'Create Time']).Priority.count())
最初产生了大约170000个结果,其结构如下:
Priority Create Time
1.0 2011-01-01 00:00:00 1
2011-01-01 00:01:11 1
2011-01-01 00:02:10 1
...
2.0 2011-01-01 00:01:25 1
2011-01-01 00:01:35 1
...
但现在由于某种原因(我使用的是Jupyter笔记本),它只会产生:
Priority Create Time
1.0 2011-01-01 00:00:00 1
2011-01-01 00:01:11 1
2011-01-01 00:02:10 1
2.0 2011-01-01 00:01:25 1
2011-01-01 00:01:35 1
Name: Priority, dtype: int64
不知道为什么输出更改为只有5个结果(可能是我在不知不觉中更改了某些内容)
我希望结果采用以下格式:
Priority month Count
1.0 2011-01 a
2011-02 b
2011-03 c
...
2.0 2011-01 x
2011-02 y
2011-03 z
...
显示如何正确更改其他值的频率的要点,例如
小时/天/月/年
。有了这些答案,请您解释一下您的代码中发生了什么,因为我是新的和正在学习的熊猫,希望了解这个过程。谢谢。一个可能的解决方案是将datetime列转换为mont房协期间截止日期:
或使用:
样本:
np.random.seed(123)
df = pd.DataFrame({'Create Time':pd.date_range('2019-01-01', freq='10D', periods=10),
'Priority':np.random.choice([0,1], size=10)})
print (df)
Create Time Priority
0 2019-01-01 0
1 2019-01-11 1
2 2019-01-21 0
3 2019-01-31 0
4 2019-02-10 0
5 2019-02-20 0
6 2019-03-02 0
7 2019-03-12 1
8 2019-03-22 1
9 2019-04-01 0
对于第一个,我得到的是
AttributeError:'RangeIndex'对象没有属性'to_period'
,第二个只生成2个结果OK-第一个与.dt.to_period('m')一起工作
。尽管如此,我仍然只得到了两个结果-我期待更多。你知道如何应对这个问题吗?@practicalClearner-hmmm,日期时间和你期望的一样吗?因为这似乎是一些与数据相关的问题。我想是的…导入csv文件时,我的命令是df=pd.read\u csv('records-for-2011.csv',parse\u dates=['Create Time']))
。以前它可以处理170000多行,但是当我开始调整它以获得我想要的内容时,它以某种方式改变了。不知道why@pragmaticlearner-代码看起来不错,是否可以检查datetimes是否有更多的月份,如2个月?
print(df.groupby(['Priority', pd.Grouper(key='Create Time', freq='MS')]).Priority.count())
np.random.seed(123)
df = pd.DataFrame({'Create Time':pd.date_range('2019-01-01', freq='10D', periods=10),
'Priority':np.random.choice([0,1], size=10)})
print (df)
Create Time Priority
0 2019-01-01 0
1 2019-01-11 1
2 2019-01-21 0
3 2019-01-31 0
4 2019-02-10 0
5 2019-02-20 0
6 2019-03-02 0
7 2019-03-12 1
8 2019-03-22 1
9 2019-04-01 0
print(df.groupby(['Priority', df['Create Time'].dt.to_period('m')]).Priority.count())
Priority Create Time
0 2019-01 3
2019-02 2
2019-03 1
2019-04 1
1 2019-01 1
2019-03 2
Name: Priority, dtype: int64
print(df.groupby(['Priority', pd.Grouper(key='Create Time', freq='MS')]).Priority.count())
Priority Create Time
0 2019-01-01 3
2019-02-01 2
2019-03-01 1
2019-04-01 1
1 2019-01-01 1
2019-03-01 2
Name: Priority, dtype: int64