考虑这个 Pandas 数据框:
df = pd.DataFrame({
'User ID': [1, 2, 2, 3],
'Cupcakes': [1, 5, 4, 2],
'Biscuits': [2, 5, 3, 3],
'Score': [0.65, 0.12, 0.15, 0.9]
})
Run Code Online (Sandbox Code Playgroud)
IE。
User ID Cupcakes Biscuits Score
0 1 1 2 0.65
1 2 5 5 0.12
2 2 4 3 0.15
3 3 2 3 0.90
Run Code Online (Sandbox Code Playgroud)
我想整理(“融化”)这些数据,以便甜点类型是单独的观察结果。但我也想保留每个用户的分数。
melt()直接使用不起作用:
df.melt(
id_vars=['User ID'],
value_vars=['Cupcakes', 'Biscuits'],
var_name='Dessert', value_name='Enjoyment'
)
Run Code Online (Sandbox Code Playgroud)
...给出:
User ID Dessert Enjoyment
0 1 Cupcakes 1
1 2 Cupcakes 5
2 2 Cupcakes 4
3 3 Cupcakes 2
4 1 Biscuits 2
5 2 Biscuits 5
6 2 Biscuits 3
7 3 Biscuits 3
Run Code Online (Sandbox Code Playgroud)
分数数据丢了!
我无法使用,wide_to_long()因为我的甜点类型没有通用的“存根名称”。
我无法将整理后的数据与原始数据连接或合并,因为整理后的数据已重新编制索引,并且每次观察的用户 ID 都不是唯一的。
如何整理这些数据但保留不参与整理的列?
将列添加Score到id_varsin DataFrame.melt:
id_vars : 元组、列表或 ndarray,可选
用作标识符变量的列。
df1 = df.melt(
id_vars=['User ID', 'Score'],
value_vars=['Cupcakes', 'Biscuits'],
var_name='Dessert', value_name='Enjoyment'
)
print (df1)
User ID Score Dessert Enjoyment
0 1 0.65 Cupcakes 1
1 2 0.12 Cupcakes 5
2 2 0.15 Cupcakes 4
3 3 0.90 Cupcakes 2
4 1 0.65 Biscuits 2
5 2 0.12 Biscuits 5
6 2 0.15 Biscuits 3
7 3 0.90 Biscuits 3
Run Code Online (Sandbox Code Playgroud)
如果需要在没有User ID和Score省略的情况下熔化所有列value_vars:
df.melt(
id_vars=['User ID', 'Score'],
var_name='Dessert', value_name='Enjoyment'
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1942 次 |
| 最近记录: |