例如这是我的数据框
df = pd.DataFrame([['Bob', 'lunch', 70],
['Bob', 'dinner', 160],
['Sara', 'lunch', 150],
['Sara', 'dinner', 220]],
columns=['Name', 'Meal', 'Cost'])
Name Meal Cost
0 Bob lunch 70
1 Bob dinner 160
2 Sara lunch 150
3 Sara dinner 220
如何使用 pd.melt
或任何其他方式将数据帧转换为以下内容?
Name Meal_1 Cost_1 Meal_2 Cost_2
0 Bob lunch 70 dinner 160
1 Sara lunch 150 dinner 220
最佳答案
a) 这看起来更像是 pivot()
而不是 melt()
的工作。
df.pivot(index=['Name'], columns=['Meal'], values=['Cost'])
结果是一个数据透视表:
Cost
Meal dinner lunch
Name
Bob 160 70
Sara 220 150
不完全是您想要的,但也许更好。
b) 备选方案:宽表
Meal_1 Cost_1 Meal_2 Cost_2
Name
Bob lunch 70 dinner 160
Sara lunch 150 dinner 220
...你可以用这样的代码得到:
df = df.set_index('Name')
lunch = df.loc[df.Meal.eq('lunch')]
dinner = df.loc[df.Meal.eq('dinner')]
df = pd.concat([lunch, dinner], axis=1)
df.columns = ['Meal_1', 'Cost_1', 'Meal_2', 'Cost_2']
关于python - 如何使用 pd.melt 转换数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72628294/