Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 如何使用groupby-pandas按时间频率计数_Python_Pandas_Pandas Groupby - Fatal编程技术网

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