首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据Pandas中一行的值将一行展开为多行

如何根据Pandas中一行的值将一行展开为多行
EN

Stack Overflow用户
提问于 2016-12-05 05:19:18
回答 3查看 7.3K关注 0票数 5

例如,这是我的一个DataFrame。请参考图像链接。

在此之前

代码语言:javascript
复制
d = {1: ['2134',20, 1,1,1,0], 2: ['1010',5, 1,0,0,0], 3: ['3457',15, 0,1,1,0]}
columns=['Code', 'Price', 'Bacon','Onion','Tomato', 'Cheese'] 

df = pd.DataFrame.from_dict(data=d, orient='index').sort_index()
df.columns = columns

我要做的是将单个行展开为多个行。然后,Dataframe应该看起来像下面链接的图像。其意图是使用一些列(从‘培根’到‘奶酪’)作为分类。

After: 之后

我试图找到答案,但失败了。谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-05 08:02:54

您可以首先使用set_indexstack重新组合,然后通过queryget_dummies从列level_2和最后一个reindex列中筛选,以添加没有1reset_index的缺失。

代码语言:javascript
复制
df = df.set_index(['Code', 'Price']) \
       .stack() \
       .reset_index(level=2, name='val') \
       .query('val == 1') \
       .level_2.str.get_dummies() \
       .reindex(columns=df.columns[2:], fill_value=0) \
       .reset_index()
print (df)
   Code  Price  Bacon  Onion  Tomato  Cheese
0  2134     20      1      0       0       0
1  2134     20      0      1       0       0
2  2134     20      0      0       1       0
3  1010      5      1      0       0       0
4  3457     15      0      1       0       0
5  3457     15      0      0       1       0
票数 4
EN

Stack Overflow用户

发布于 2016-12-05 05:24:41

您可以使用堆栈和transpose进行相应的操作和格式化。

代码语言:javascript
复制
df = df.stack().to_frame().T
df.columns = ['{}_{}'.format(*c) for c in df.columns]
票数 2
EN

Stack Overflow用户

发布于 2016-12-05 06:51:27

使用pd.melt将所有食物放在一列中,然后使用pd.get_dummies展开列。

代码语言:javascript
复制
df1 = pd.melt(df, id_vars=['Code', 'Price'])
df1 = df1[df1['value'] == 1]
df1 = pd.get_dummies(df1, columns=['variable'], prefix='', prefix_sep='').sort_values(['Code', 'Price'])
df1.reindex(columns=df.columns, fill_value=0)

在我看到jezrael是如何使用reindex添加和删除列之后进行编辑的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40967554

复制
相关文章

相似问题

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