删除Pandas中的空组保留GroupBy对象

时间:2017-06-26 15:30:53

标签: python pandas

我正在尝试在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

0 个答案:

没有答案