векторизация групповых панд - PullRequest
0 голосов
/ 02 мая 2018

У меня есть такой фрейм данных:

day    time    category   count    

 1      1         a         13
 1      2         a         47
 1      3         a         1
 1      5         a         2
 1      6         a         4
 2      7         a         14
 2      2         a         10
 2      1         a         9
 2      4         a         2
 2      6         a         1

Я хочу сгруппировать по дням и категориям и получить вектор количества за раз. Где время может быть между 1 и 10. Максимальное и минимальное время я определил в двух переменных, называемых максимальным и минимальным.

Вот как я хочу, чтобы итоговый фрейм данных выглядел:

day     category   count    

 1          a      [13,47,1,0,2,4,0,0,0,0]
 2          a      [9,10,0,2,0,1,14,0,0,0]

Кто-нибудь знает, как превратить эту агрегацию в сектор?

1 Ответ

0 голосов
/ 02 мая 2018

Используйте reindex с MultiIndex.from_product для добавления отсутствующих категорий, а затем groupby с list:

df = df.set_index(['day','time', 'category'])

a = df.index.levels[0]
b = range(1,11)
c = df.index.levels[2]

df = df.reindex(pd.MultiIndex.from_product([a,b,c], names=df.index.names), fill_value=0)
df = df.groupby(['day','category'])['count'].apply(list).reset_index()
print (df)
   day category                             count
0    1        a  [13, 47, 1, 0, 2, 4, 0, 0, 0, 0]
1    2        a  [9, 10, 0, 2, 0, 1, 14, 0, 0, 0]

EDIT:

df = (df.set_index(['day','time', 'category'])['count']
       .unstack(1, fill_value=0)
       .reindex(columns=range(1,11), fill_value=0))
print (df)
time          1   2   3   4   5   6   7   8   9   10
day category                                        
1   a         13  47   1   0   2   4   0   0   0   0
2   a          9  10   0   2   0   1  14   0   0   0

df = df.apply(list, 1).reset_index(name='count')
print (df)

   day                ...                                            count
0    1                ...                 [13, 47, 1, 0, 2, 4, 0, 0, 0, 0]
1    2                ...                 [9, 10, 0, 2, 0, 1, 14, 0, 0, 0]

[2 rows x 3 columns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...