Преобразовать столбец месяца в строку и объединить другие столбцы под ним - PullRequest
0 голосов
/ 23 октября 2018

У меня есть такие данные

user    product     month
 A       1011         2
 B       2011         2
 B       2034         3
 C       2078         4
 D       1098         1
 A       9087         3
 A       5017         4
 D       1872         1
 A       1011         4

и т. Д.

Я хочу объединить эти данные таким образом, чтобы преобразовать столбец месяца в строку, так как они становятся заголовками, а яможет объединять «продукт» с уникальными значениями для каждого пользователя и в каком месяце к ним обращались.Таким образом, выходные данные должны быть примерно такими:

user   product  1  2  3  4  5  6  7  8  9  10  11  12
 A       3      0  1  1  2  0  0  0  0  0   0   0   0
 B       2      0  1  1  0  0  0  0  0  0   0   0   0
 C       1      0  0  0  1  0  0  0  0  0   0   0   0
 D       2      2  0  0  0  0  0  0  0  0   0   0   0

Я думаю, я могу использовать Pivot, чтобы сделать это, но я не могу агрегировать под заголовком месяца.

Я хочу пойти на шагвперед и разделите продукт на каждый месяц, чтобы найти коэффициент использования каждый месяц, например:

user   product  1   2     3     4     5  6  7  8  9  10  11  12
 A       3      0  0.33  0.33   0.66  0  0  0  0  0   0   0   0
 B       2      0  0.50  0.50    0    0  0  0  0  0   0   0   0
 C       1      0   0     0      1    0  0  0  0  0   0   0   0
 D       2      1   0     0      0    0  0  0  0  0   0   0   0

1 Ответ

0 голосов
/ 23 октября 2018

Используя groupby + nunqiue получить первые два столбца, затем мы используем get_dummies получить другие

s1=df.groupby('user').product.nunique()
s2=df.set_index('user').month.astype(str).str.get_dummies().sum(level=0)
pd.concat([s1,s2.div(s1,axis=0)],1)
Out[121]: 
      product    1         2         3         4
user                                            
A           3  0.0  0.333333  0.333333  0.666667
B           2  0.0  0.500000  0.500000  0.000000
C           1  0.0  0.000000  0.000000  1.000000
D           2  1.0  0.000000  0.000000  0.000000
...