使用Pandas Groupby和date_range进行时间序列分析时出错



我有一个类似于下面的Pandas DataFrame,我正试图将DataFrame分割成一周的块,并在每个块上运行一个函数。我相信这应该可以用groupbydate_range函数来完成,但我遇到了一些麻烦。

我见过其他人用日期作为索引做类似的事情。但是,在这种情况下,这将不起作用,因为df中的多行可能具有相同的日期。此外,df中并没有表示每个日期。

groupby和/或date_range函数有什么问题?

一旦我弄清楚了这一点,我想使用nx.from_pandas_dataframe为每个为期一周的区块创建一个网络,并计算每个区块中的节点数量。

# create list of edges with 'source', 'target', 'timestamp'
edges = [('e', 'a1', '12/02/2015'),
         ('e', 'a2', '12/02/2015'),
         ('e', 'a3', '12/03/2015'),
         ('e', 'a4', '12/04/2015'),
         ('e', 'a5', '12/04/2015'),
         ('e', 'a1', '12/08/2015'),
         ('e', 'a2', '12/09/2015'),
         ('e', 'a6', '12/09/2015'),
         ('e', 'a7', '12/13/2015'),
         ('e', 'a1', '12/15/2015'),
         ('e', 'a6', '12/16/2015'),
         ('e', 'a8', '12/17/2015'),
         ('e', 'a9', '12/18/2015')]
# create a DataFrame from edges
df = pd.DataFrame(edges, columns=['source', 'target', 'date'], )
# sort df by date and identify first and last date
df.sort(columns=['date'], ascending=True, inplace=True)
first_date = df.date.irow(0)
last_date = df.date.irow(-1)
df.groupby(pd.date_range(start=first_date, end=last_date, freq='W'))
AssertionError: Grouper and axis must be same length

可能有更好的解决方案,但这里有一个解决方案。我创建了一个由年/周元组对键控的数据帧字典。

首先,我在年/周元组对的数据框架中创建一列。然后我用字典理解法在这个专栏上分组。

df['year_week'] = [(d.year, d.week) for d in df['date']]
weekly_groups = {w: g for w, g in df.groupby('year_week')}
>>> weekly_groups
{(2015, 49):   source target       date   year_week
 0      e     a1 2015-12-02  (2015, 49)
 1      e     a2 2015-12-02  (2015, 49)
 2      e     a3 2015-12-03  (2015, 49)
 3      e     a4 2015-12-04  (2015, 49)
 4      e     a5 2015-12-04  (2015, 49),
 (2015, 50):   source target       date   year_week
 5      e     a1 2015-12-08  (2015, 50)
 6      e     a2 2015-12-09  (2015, 50)
 7      e     a6 2015-12-09  (2015, 50)
 8      e     a7 2015-12-13  (2015, 50),
 (2015, 51):    source target       date   year_week
 9       e     a1 2015-12-15  (2015, 51)
 10      e     a6 2015-12-16  (2015, 51)
 11      e     a8 2015-12-17  (2015, 51)
 12      e     a9 2015-12-18  (2015, 51)}

最新更新