gpt4 book ai didi

python - 如何在 Pandas 中整理(融化)数据并保留所有其他列?

转载 作者:太空宇宙 更新时间:2023-11-04 04:06:46 26 4
gpt4 key购买 nike

考虑这个 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]
})

即。

   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

我要tidy ("melt")此数据使甜点 类型 是单独的观察结果。但我也想保留每个用户的分数。

使用 melt()直接不起作用:

df.melt(
id_vars=['User ID'],
value_vars=['Cupcakes', 'Biscuits'],
var_name='Dessert', value_name='Enjoyment'
)

...给出:

   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

我丢失了分数数据!

我不能使用 wide_to_long()因为我的甜点类型没有通用的“ stub 名称”。

我无法将整理后的数据与原始数据联接或合并,因为整理后的数据已重新编制索引,并且用户 ID 对于每个观察而言不是唯一的。

如何整理这些数据但保留整理中未涉及的列?

最佳答案

DataFrame.melt 中将 Score 列添加到 id_vars :

id_vars : tuple, list, or ndarray, optional

Column(s) to use as identifier variables.

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

如果需要融化所有没有User IDScore的列,省略value_vars:

df.melt(
id_vars=['User ID', 'Score'],
var_name='Dessert', value_name='Enjoyment'
)

关于python - 如何在 Pandas 中整理(融化)数据并保留所有其他列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57175743/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com