Как превратить метки столбца в значения в столбце? - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть DataFrame ratings, который представляет исходную форму данных.

ratings
        user_id  movie_id  rating
    32236   1      1         5
    23171   1      2         3
    83307   1      3         4
    70539   1      7         4
    13542   1      10        3
    39562   2      10        2
    172     5      2         3
    50664   6      7         2
    11223   7      7         5
    8285    7      8         5
    5643    7      10        4
    12746   8      7         3
    81332   9      7         4
    606     10     7         4

И еще один DataFrame df_1, который получается из Dataframe после применения ratings.pivot_table(index=['movie_id'], columns='user_id', values='rating', fill_value=0).rename_axis(None, axis=1).reset_index()

df_1
   movie_id  1  2  5  6  7  8  9  10   IRAM
1     2      3  0  3  0  0  0  0   0    2
6     7      4  0  0  2  5  3  4   4    4
9     10     3  2  0  0  4  0  0   0    1
2     3      4  0  0  0  0  0  0   0    3 

Как преобразовать df_1 обратно в форму ratings (IRAM можно отбросить)?


Вывод с использованием предложения @ meW.

    movie_id  user_id   rating
0      9         1        5
1      5         1        3
2      2         1        3
3      2         5        3
4      9         6        4
5      9         7        5
6      9         10       4
7      9       borda      18
8      5       borda      3
9      2       borda      6
10     9        rank      3
11     5        rank      9
12     2        rank      7

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Может ли разложить то, что вы ищете?

>>>df1
   movie_id  1  2  5  6  7  8  9  10
0         2  3  0  3  0  0  0  0   0
1         3  4  0  0  0  0  0  0   0
2         7  4  0  0  2  5  3  4   4
3         8  0  0  0  0  5  0  0   0
4        10  3  2  0  0  4  0  0   0

df1 = df1.set_index('movie_id').unstack().reset_index()
df1.columns = ['user_id', 'movie_id', 'rating']

>>>df1
    user_id  movie_id  rating
0         1         2       3
1         1         3       4
2         1         7       4
3         1         8       0
4         1        10       3
5         2         2       0
6         2         3       0
7         2         7       0
8         2         8       0
9         2        10       2
10        5         2       3
11        5         3       0
12        5         7       0
13        5         8       0
14        5        10       0
15        6         2       0
16        6         3       0
17        6         7       2
18        6         8       0
.
.
.
0 голосов
/ 22 февраля 2019

Использование melt:

ndf = ratings.pivot_table(index=['movie_id'], columns='user_id', values='rating', fill_value=0).rename_axis(None, axis=1).reset_index()

t = pd.melt(ndf, id_vars='movie_id')
t = t[t.value != 0].reset_index(drop=True)
t.rename(columns={'value': 'rating', 'variable': 'user_id'}, inplace=True)

Проверка решения

df.loc[:, ['movie_id', 'user_id', 'rating']].eq(t)

+----+----------+---------+--------+
|    | movie_id | user_id | rating |
+----+----------+---------+--------+
|  0 | True     | True    | True   |
|  1 | True     | True    | True   |
|  2 | True     | True    | True   |
|  3 | True     | True    | True   |
|  4 | True     | True    | True   |
|  5 | True     | True    | True   |
|  6 | True     | True    | True   |
|  7 | True     | True    | True   |
|  8 | True     | True    | True   |
|  9 | True     | True    | True   |
| 10 | True     | True    | True   |
| 11 | True     | True    | True   |
| 12 | True     | True    | True   |
| 13 | True     | True    | True   |
+----+----------+---------+--------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...