2016-06-28 3 views
1

Я пытаюсь подсчитать количество членов в каждой группе, сродни pandas.DataFrame.groupby.count. Однако, похоже, он не работает. Вот пример:Понимание xarray groupby

In [1]: xr_test = xr.DataArray(np.random.rand(6), coords=[[10,10,11,12,12,12]], dims=['dim0']) 
     xr_test 
Out[1]: <xarray.DataArray (dim0: 6)> 
     array([ 0.92908804, 0.15495709, 0.85304435, 0.24039265, 0.3755476 , 
       0.29261274]) 
     Coordinates: 
      * dim0  (dim0) int32 10 10 11 12 12 12 

In [2]: xr_test.groupby('dim0').count() 
Out[2]: <xarray.DataArray (dim0: 6)> 
     array([1, 1, 1, 1, 1, 1]) 
     Coordinates: 
      * dim0  (dim0) int32 10 10 11 12 12 12 

Однако, я ожидаю, этот вывод:

Out[2]: <xarray.DataArray (dim0: 3)> 
     array([2, 1, 3]) 
     Coordinates: 
      * dim0  (dim0) int32 10 11 12 

Что происходит?

Другими словами:

In [3]: xr_test.to_series().groupby(level=0).count() 
Out[3]: dim0 
     10 2 
     11 1 
     12 3 
     dtype: int64 

ответ

2

Это ошибка! В настоящее время Xarray делает (в данном случае ошибочное) предположение, что координаты, соответствующие размерам, имеют все уникальные значения. Это обычно хорошая идея, но не обязательно. Если вы выполните другую координату, это должно работать должным образом, например, xr_test = xr.DataArray(np.random.rand(6), coords={'aux': ('x', [10,10,11,12,12,12])}, dims=['x']) xr_test.groupby('aux').count()

+0

Вы хотите, чтобы я открыл вопрос в xarray git об этом? – Kartik

+0

Кроме того, я уже создал массив в другом фрагменте кода, и он выглядит точно так же, как в моем примере выше: 'xr.DataArray (np.random.rand (6), coords = [[10,10,11] , 12,12,12]], dims = ['dim0']). Теперь этот другой код довольно длинный и занимает несколько дней. Поэтому, повторяя, что не может быть и речи, как я могу заставить мой существующий массив иметь новую координату? Я имею в виду, что это лучший способ? – Kartik

+0

Я также не могу найти способ доступа к индексам в '' aux''. Для меня важно всегда обращаться к ним. Как я могу получить к ним доступ? Спасибо за помощь в этом @Stephan. – Kartik

Смежные вопросы