2016-07-22 123 views
-1
日期时间,今日,集团就在一个月频率计数差异

我曾经数据的CSV格式如下:使用熊猫

1,2015-02-01 

格式

<internal_id>,<datetime> 

我想忽略内部ID,并使用日期时间(如果可能的话,即使不从csv中读取它以节省内存)。

而我想要绘制的文件和今天的日期月的差异的直方图,直方图的每个栏是一个月。

在伪码的过程是:
1)在文件和今天
2)中的每一行的月份计算德差积累,在一个月水桶差异
3)中的直方图叠加或类似

东西现在我有此代码在jupyter笔记本python3

from io import StringIO 
import pandas as pd 
import matplotlib.pyplot as plt 
from datetime import datetime 

% matplotlib notebook 

text = """1,2015-01-01 
1,2015-02-01 
1,2015-02-01 
1,2015-03-01 
1,2015-03-01 
1,2015-03-01 
1,2015-04-01 
1,2015-04-01 
1,2015-04-01 
1,2015-04-01""" 

plt.subplots() 
def diff(row_date): 
    today = datetime.now() 
    return (today.year - row_date.year) * 12 + (today.month - row_date.month) 

df = pd.read_csv(StringIO(text), usecols=[1], header=None, names=['date'], parse_dates=['date']) 
serie = df.date 
serie = serie.apply(diff) 
serie.hist() 

code in jupyter Plot result

是否有一个更优雅的方式做它使用内置的功能组和计算的时间使用熊猫的区别? (或更快) 谢谢!

回答

0
from StringIO import StringIO 
import pandas as pd 

text = """1,2015-01-18 
1,2015-02-10 
1,2015-02-15 
1,2015-02-20 
1,2015-03-01 
1,2015-03-02 
1,2015-03-03""" 

df = pd.read_csv(StringIO(text), header=None, parse_dates=[1], names=['count', 'Date'], index_col=1) 

df.groupby(pd.TimeGrouper('M')).count().hist() 

enter image description here

+0

嗨piRSquared,感谢您的回答,但CSV的第一个元素是一个标识,所以我不能用它来计算。我已经更新了答案。 –

+0

@GeorgeC修复它。我用'count'替换了'sum'。 'count'只是该组的长度。 – piRSquared

+0

嗨,我认为解决方案不会做我想要的解决方案:http://imgur.com/a/fTt7k想要的:http://imgur.com/a/OQMy4 –