复杂 Pandas 熔体

Complex Pandas Melt

我有一个复杂的熔化函数需要执行。我试过逐步解决它并检查其他问题,但我很困惑!

这是我当前的数据框:

         1   2   4   5   6   10   24
Userid

u_A      0   1   3   0   0    0    5
u_B      0   0   0   0   0    0    1

我需要解决这个问题:

Userid    Movieid    Rating
u_A          2         1
u_A          4         3
u_A          24        5
u_B          24        1

所以,澄清一下,删除 0 个评分并将每个评分放在单独的行中,用户 ID 可以访问。我知道通常列轴也有一个名称(在这种情况下,顶部的那个系列),但我在处理过程中以某种方式设法丢失了它。

我得到的最接近的是语句 fold_1_df.melt(var_name=' movie_id', value_name=' rating') 但格式仍然不完整

您可以.reset_index(),熔化并重新设置索引。然后通过 rating:

过滤数据框
x = (
    df.reset_index()
    .melt(id_vars="Userid", var_name="movie_id", value_name="rating")
    .set_index("Userid")
)
print(x[x["rating"] > 0])

打印:

       movie_id  rating
Userid                 
u_A           2       1
u_A           4       3
u_A          24       5
u_B          24       1

此时我找到了一个解决方法,如下所示:

fold_1_df = fold_1_df.melt(ignore_index = False,var_name=' movie_id', value_name=' rating') 
fold_1_df[fold_1_df[' rating'] != 0]

您可以将 0 替换为 NaN,然后使用 df.stack()

df.rename_axis("movie_id", axis=1).replace(0, np.nan).stack().reset_index(
    name="rating"
)

  Userid movie_id  rating
0    u_A        2     1.0
1    u_A        4     3.0
2    u_A       24     5.0
3    u_B       24     1.0