例如,这是我的一个DataFrame。请参考图像链接。
: 在此之前
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: 之后
我试图找到答案,但失败了。谢谢。
发布于 2016-12-05 08:02:54
您可以首先使用set_index和stack重新组合,然后通过query和get_dummies从列level_2和最后一个reindex列中筛选,以添加没有1和reset_index的缺失。
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发布于 2016-12-05 05:24:41
您可以使用堆栈和transpose进行相应的操作和格式化。
df = df.stack().to_frame().T
df.columns = ['{}_{}'.format(*c) for c in df.columns]发布于 2016-12-05 06:51:27
使用pd.melt将所有食物放在一列中,然后使用pd.get_dummies展开列。
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添加和删除列之后进行编辑的。
https://stackoverflow.com/questions/40967554
复制相似问题