Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.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:根据timeseries数据生成直方图/透视图_Python_Pandas - Fatal编程技术网

Python Pandas:根据timeseries数据生成直方图/透视图

Python Pandas:根据timeseries数据生成直方图/透视图,python,pandas,Python,Pandas,我有一个数据帧,前5行是: indexed.head(5) >>>> SOURCE_SYSTEM TRADE_ID endtime 2013-09-12 15:04:44 SystemA PXXX86883150911 2013-09-12 17:25:07 SystemB PXXX660481402

我有一个数据帧,前5行是:

indexed.head(5)
>>>>
                              SOURCE_SYSTEM              TRADE_ID
endtime
2013-09-12 15:04:44                 SystemA       PXXX86883150911
2013-09-12 17:25:07                 SystemB       PXXX66048140211
2013-09-12 17:25:07                 SystemY       PYYY66049140211
2013-09-12 17:25:08                 SystemZ       PZZZ34553220311
2013-09-12 17:25:09                 SystemZ       PAAA76226310311
注意,索引是由datetime列组成的

我想生成两个东西: 我会按月份或其他时间长度计算结果 ii按期间和第二列值(即轴)分割的结果计数

我已经能够通过首先创建一个Period对象来实现第一个:

prng = pd.period_range(indexed.index.min(), indexed.index.max(),freq='M')
然后迭代,一路上执行一种查找:

for r in prng:
    print ( str(r), len(indexed[str(r)]) )
返回:

2013-09 8
2013-10 2
2013-11 4
2013-12 1069
2014-01 2242
2014-02 1338
2014-03 2567
2014-04 762
2014-05 1028
2014-06 1885
2014-07 4303
2014-08 879
2014-09 399
2014-10 6002
2014-11 622
2014-12 625
这正是我想要的
问题是,有没有更简单的方法?那么我的第二部分呢?也许有一种使用groupby和/或pivot的方法?我读过这些文件,但不知怎么的,我没有抓住要点。有什么建议吗?

您可以使用如下所示的方法更轻松地完成我的任务

import pandas as pd
from random import choice

N = 1024

dt = pd.date_range('1/1/2011', periods=N, freq='3H')
A = [choice('ABCD') for _ in range(N)]
B = [choice('WXYZ') for _ in range(N)]

df = pd.DataFrame(data={'A':A, 'B':B}, index=dt)
#                      A  B
# 2011-01-01 00:00:00  B  Z
# 2011-01-01 03:00:00  A  X
# 2011-01-01 06:00:00  B  Y
# 2011-01-01 09:00:00  D  W
# 2011-01-01 12:00:00  A  Z
# ...    

resampled = df.resample('M', how='count')
#              A    B
#2011-01-31  248  248
#2011-02-28  224  224
#2011-03-31  248  248
#2011-04-30  240  240
#2011-05-31   64   64
对于ii,您可以使用,一旦您创建了一个月列,该列保存年度月份供您使用

df['month'] = ['{}-{}'.format(y, m) for y, m in zip(df.index.year, df.index.month)]

pivot = pd.pivot_table(df, values='B', index='month', columns='A', aggfunc='count')
#A        A   B   C   D
#month
#2011-1  64  58  67  59
#2011-2  62  52  47  63
#2011-3  70  58  59  61
#2011-4  52  63  64  61
#2011-5  16  19  15  14

如下图所示,您可以更轻松地使用

import pandas as pd
from random import choice

N = 1024

dt = pd.date_range('1/1/2011', periods=N, freq='3H')
A = [choice('ABCD') for _ in range(N)]
B = [choice('WXYZ') for _ in range(N)]

df = pd.DataFrame(data={'A':A, 'B':B}, index=dt)
#                      A  B
# 2011-01-01 00:00:00  B  Z
# 2011-01-01 03:00:00  A  X
# 2011-01-01 06:00:00  B  Y
# 2011-01-01 09:00:00  D  W
# 2011-01-01 12:00:00  A  Z
# ...    

resampled = df.resample('M', how='count')
#              A    B
#2011-01-31  248  248
#2011-02-28  224  224
#2011-03-31  248  248
#2011-04-30  240  240
#2011-05-31   64   64
对于ii,您可以使用,一旦您创建了一个月列,该列保存年度月份供您使用

df['month'] = ['{}-{}'.format(y, m) for y, m in zip(df.index.year, df.index.month)]

pivot = pd.pivot_table(df, values='B', index='month', columns='A', aggfunc='count')
#A        A   B   C   D
#month
#2011-1  64  58  67  59
#2011-2  62  52  47  63
#2011-3  70  58  59  61
#2011-4  52  63  64  61
#2011-5  16  19  15  14

你能更详细地解释一下ii应该如何工作吗?嗨,Ffisegydd,ii是一个月的列表,然后我的源系统列{'SystemA','SystemB','SystemC…,'SystemZ}的内容列在顶部,同时单元格中包含一个值计数。我觉得很像你在回答中详细说明的那样。你能更详细地解释一下ii应该如何工作吗?嗨,Ffisegydd,ii将是一个月的列表,然后我的源系统列{'SystemA','SystemB','SystemC…,'SystemZ}的内容列在顶部,巧合的单元格包含一个值计数。我觉得很像你在回答中详细描述的那样。我尝试了以下方法:test=pd.pivot\u table index,index='month',values='SOURCE\u SYSTEM\u ID',columns='SOURCE\u SYSTEM\u ID',aggfunc='count',但得到了一个类型错误:pivot\u table得到了一个意外的关键字参数'index'error.pd.\u version\u返回'0.11.0'aha-好,我会尝试一下——这也许可以解释为什么与docs相比,这其中的一些被证明是很棘手的。非常好——我尝试了上述的混合,并查看了0.11个docs——并得出了以下行q=pd.pivot\u tableindexed,rows='month',values='TRADE\u ID',cols='SOURCE\u SYSTEM\u ID',aggfunc='count'已生成我要查找的内容-结果@TomKimber:我希望你的评论并不意味着你在使用0.11版本——即使你不关心新功能,从那以后已经修复了很多bug,使用该版本感觉非常危险-@DSM不幸的是,我是在一个公司防火墙后面,所以保持最新是很棘手的。我刚刚设法偷偷安装了一个Anaconda,所以应该很快就移动到0.14了…:我希望是0.15,因为.eval函数对于我正在做的事情看起来相当方便。我尝试了以下方法:test=pd.pivot\u tableindexed,index='month',values='SOURCE\u SYSTEM\u ID',columns='SOURCE\u SYSTEM\u ID',aggfunc='count'但得到一个TypeError:pivot\u表得到一个意外的关键字参数'index'error.pd.\uuuuuuuuu version\uuuuuuuuuu返回'0.11.0'aha-ok,我会尝试一下——这也许可以解释为什么与docs相比,这其中的一些被证明是很棘手的。非常好——我尝试了上述的混合,并查看了0.11个docs——并得出了以下行q=pd.pivot\u tableindexed,rows='month',values='TRADE\u ID',cols='SOURCE\u SYSTEM\u ID',aggfunc='count'已生成我要查找的内容-结果@TomKimber:我希望你的评论并不意味着你在使用0.11版本——即使你不关心新功能,从那以后已经修复了很多bug,使用该版本感觉非常危险-@DSM不幸的是,我是在一个公司防火墙后面,所以保持最新是很棘手的。我刚刚设法偷偷安装了一个Anaconda,所以应该很快就移动到0.14了…:我希望是0.15,因为.eval函数对于我正在做的事情看起来相当方便。