我正在尝试在GroupBy对象上获取value_counts:
unstacked = data.groupby(pd.Grouper(freq="7D"))['domain'].value_counts().\
sort_values(ascending=False).unstack().fillna(0)
因此,我获得了一个很好的DataFrame,其中域值为列,时间段为行,以及在相应单元格中的一段时间内对域的访问次数。凉。
然而,有一段时间我偶然发现一个例外:
ValueError: operands could not be broadcast together with shape (3,) (2,)
在value_counts()中出现。这本身就是一种奇怪的行为,但没关系,试图深入挖掘,我发现它发生在数据中没有任何项目的组中(例如,我将数据分组为三个7天,并且在第二个区间,没有条目)。
>> grouped = data.groupby(pd.Grouper(freq="7D"))['domain']
>> grouped.head()
date
2017-04-01 google.com
2017-04-17 stackoverflow.com
Name: domain, dtype: object
>> print(grouped.groups)
{Timestamp('2017-04-15 00:00:00', freq='7D'): 2, Timestamp('2017-04-08 00:00:00', freq='7D'): 1, Timestamp('2017-04-01 00:00:00', freq='7D'): 1}
当我尝试列出组时,我会看到以下例外情况:
>> for key, item in grouped:
>> print(key)
>> print(grouped.get_group(key))
date
2017-04-01 google.com
Name: domain, dtype: object
2017-04-08 00:00:00
KeyError: Timestamp('2017-04-08 00:00:00', freq='7D')
对我来说,似乎有效的解决方案是从SeriesGroupBy中删除指定为Timestamp('2017-04-08 00:00:00', freq='7D')
的组,同时保留对象本身。但是,这似乎是不可能的(使用filter
等方法返回一个DataFrame,而旧的del
也会提供异常)。
有人可以为此任务提出解决方法吗?我想我几乎尝试过任何事情。
迷你数据:
date,domain
2017-04-01,google.com
2017-04-17,stackoverflow.com