复杂 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
我有一个复杂的熔化函数需要执行。我试过逐步解决它并检查其他问题,但我很困惑!
这是我当前的数据框:
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