复合Pandas融化

2024-09-27 19:21:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要做一个复杂的熔化函数。我试着通过它检查其他问题,但我被卡住了

以下是我当前的数据帧:

         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值评级,并将每个评级放在一个单独的行上,由Userid访问。我知道通常列轴也有一个名称(在本例中,是顶部的序列),但我在处理过程中设法丢失了这个名称

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


Tags: 数据函数name名称df序列fold语句
3条回答

您可以用NaN替换0,然后使用^{}

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

您可以.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]

相关问题 更多 >

    热门问题