Сглаживание кадра данных - PullRequest
0 голосов
/ 01 марта 2020

Ниже у меня есть фрейм данных с несколькими столбцами, которые я хотел бы сохранить после выравнивания. Это выравнивание должно произойти на name_id, поскольку оно представляет продольные данные. Я хотел бы в конечном итоге объединить это с другими информационными фреймами, так что групповая работа, хотя приятно не видеть, как хороший способ в конечном итоге применить методы машинного обучения. При этом я знаю, что здесь есть несколько довольно ярких людей, которые могут высказать свое мнение о том, как подойти к этому на основе вашего собственного опыта. Любые мысли с благодарностью!

df = pd.DataFrame({'name_id':[1254, 1359, 1254, 1296, 1353, 2656, 1353], 
                   'enrollment_term':['spring 2018', 'spring 2018', 'fall 2018', 'spring 2018', 'spring 2018', 'fall 2020', 'fall 2018'],
                   'gpa_term': [2.93, 3.67, 1.65, 4.00, 3.95, 2.92, 2.82],
                   'course':['math', 'geom', 'alg', 'history', 'art', 'geography', 'donkey ownership'],
                   'dorm_res':[1,1,1,0,0,1,1],
                   'home_work':[0.56, 0.89, 0.95, 0.7, 0.3, 0.64, 0.49]
                   })

df

enter image description here

1 Ответ

0 голосов
/ 13 марта 2020

Трудно точно сказать, что вы хотите сделать. Вот 3 способа сгладить ваш фрейм данных.

x=df.values.flatten()
x


x=df.stack().values
x


import numpy as np
np.reshape(df.values, (1,df.shape[0]*df.shape[1]))

Результат:

array([[1254, 'spring 2018', 2.93, 'math', 1, 0.56, 1359, 'spring 2018',
        3.67, 'geom', 1, 0.89, 1254, 'fall 2018', 1.65, 'alg', 1, 0.95,
        1296, 'spring 2018', 4.0, 'history', 0, 0.7, 1353, 'spring 2018',
        3.95, 'art', 0, 0.3, 2656, 'fall 2020', 2.92, 'geography', 1,
        0.64, 1353, 'fall 2018', 2.82, 'donkey ownership', 1, 0.49]],
      dtype=object)

Или, возможно, вы хотите использовать melt, например:

pd.melt(df, id_vars=['name_id'])

Результат:

    name_id         variable             value
0      1254  enrollment_term       spring 2018
1      1359  enrollment_term       spring 2018
2      1254  enrollment_term         fall 2018
3      1296  enrollment_term       spring 2018
4      1353  enrollment_term       spring 2018
5      2656  enrollment_term         fall 2020
6      1353  enrollment_term         fall 2018
7      1254         gpa_term              2.93
8      1359         gpa_term              3.67
9      1254         gpa_term              1.65
10     1296         gpa_term                 4
11     1353         gpa_term              3.95
12     2656         gpa_term              2.92
13     1353         gpa_term              2.82
14     1254           course              math
15     1359           course              geom
16     1254           course               alg
17     1296           course           history
18     1353           course               art
19     2656           course         geography
20     1353           course  donkey ownership
21     1254         dorm_res                 1
22     1359         dorm_res                 1
23     1254         dorm_res                 1
24     1296         dorm_res                 0
25     1353         dorm_res                 0
26     2656         dorm_res                 1
27     1353         dorm_res                 1
28     1254        home_work              0.56
29     1359        home_work              0.89
30     1254        home_work              0.95
31     1296        home_work               0.7
32     1353        home_work               0.3
33     2656        home_work              0.64
34     1353        home_work              0.49

Или, может быть, это

x = df.pivot(index='name_id', columns='enrollment_term', values='gpa_term')
x

Результат:

enrollment_term  fall 2018  fall 2020  spring 2018
name_id                                           
1254                  1.65        NaN         2.93
1296                   NaN        NaN         4.00
1353                  2.82        NaN         3.95
1359                   NaN        NaN         3.67
2656                   NaN       2.92          NaN

Я не вижу здесь никаких продольных данных.

...