首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用pd.melt转换数据

如何使用pd.melt转换数据
EN

Stack Overflow用户
提问于 2022-06-15 08:40:32
回答 2查看 61关注 0票数 3

例如,这是我的数据

代码语言:javascript
复制
df = pd.DataFrame([['Bob', 'lunch', 70], 
                   ['Bob', 'dinner', 160], 
                   ['Sara', 'lunch', 150], 
                   ['Sara', 'dinner', 220]], 
                  columns=['Name', 'Meal', 'Cost'])
代码语言:javascript
复制
   Name    Meal  Cost
0   Bob   lunch    70
1   Bob  dinner   160
2  Sara   lunch   150
3  Sara  dinner   220

如何使用pd.melt或任何其他方式将数据转换为以下内容?

代码语言:javascript
复制
   Name   Meal_1  Cost_1   Meal_2  Cost_2
0   Bob   lunch       70   dinner     160
1  Sara   lunch      150   dinner     220
EN

回答 2

Stack Overflow用户

发布于 2022-06-15 08:45:24

( a)这看起来更像是pivot()而不是melt()的工作。

代码语言:javascript
复制
df.pivot(index=['Name'], columns=['Meal'], values=['Cost'])

其结果是一个支点表:

代码语言:javascript
复制
       Cost
Meal dinner lunch
Name
Bob     160    70
Sara    220   150

不完全是你想要的,也许更好。

b)备选方案:宽表格

代码语言:javascript
复制
     Meal_1  Cost_1  Meal_2  Cost_2
Name
Bob   lunch      70  dinner     160
Sara  lunch     150  dinner     220

您可以使用这样的代码获得...which:

代码语言:javascript
复制
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']
票数 2
EN

Stack Overflow用户

发布于 2022-06-15 08:47:27

使用Groupby.aggpd.concat

代码语言:javascript
复制
In [1293]: x = df.groupby('Name').agg(list)

In [1333]: splits = [pd.DataFrame(x[col].tolist(), index=x.index).add_prefix(col + '_') for col in x.columns]

In [1338]: res = pd.concat(splits, axis=1).reset_index()

In [1339]: res
Out[1339]: 
   Name Meal_0  Meal_1  Cost_0  Cost_1
0   Bob  lunch  dinner      70     160
1  Sara  lunch  dinner     150     220
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72628294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档