Python 用于多列的按多索引分组
如何将数据帧的格式从标准的单行切换到多索引列?我试过和groupby一起玩,但似乎效率不高Python 用于多列的按多索引分组,python,pandas,Python,Pandas,如何将数据帧的格式从标准的单行切换到多索引列?我试过和groupby一起玩,但似乎效率不高 +------------+----------+--------+----------+--------+ | Product | Item | Region | In Stock | Colour | +------------+----------+--------+----------+--------+ | Electronic | Phone | Canada | Y
+------------+----------+--------+----------+--------+
| Product | Item | Region | In Stock | Colour |
+------------+----------+--------+----------+--------+
| Electronic | Phone | Canada | Y | Black |
| Electronic | Computer | Canada | N | Silver |
| Furniture | Table | Canada | Y | Brown |
| Furniture | Chair | Canada | Y | Black |
| Electronic | Phone | USA | Y | Black |
| Electronic | Computer | USA | Y | Black |
| Furniture | Table | USA | N | Black |
| Furniture | Chair | USA | Y | Black |
| Furniture | Couch | USA | Y | Black |
+------------+----------+--------+----------+--------+
到
谢谢 如果您需要按照您发布的特定顺序使用它,您可以将
melt
与pivot
一起使用。否则,您将失去多索引的顺序:
df = (df.melt(id_vars=['Product','Item','Region'])
.sort_values(['Region', 'variable'], ascending=[True,False])
.pivot(index=['Product', 'Item'], columns=['Region', 'variable'])
.droplevel(0, axis=1))
df
Out[1]:
Region Canada USA
variable In Stock Colour In Stock Colour
Product Item
Electronic Computer N Silver Y Black
Phone Y Black Y Black
Furniture Chair Y Black Y Black
Couch NaN NaN Y Black
Table Y Brown N Black
df.pivot(索引=['Product','Item'],列=['Region'])
你知道为什么我的代码长度不匹配吗?ValueError:长度不匹配:预期轴有18个元素,新值有2个元素@Stacknewb您需要升级您的pandas版本才能运行此代码。是否有方法将多索引导出到excel,同时将单元格着色为黑色背景?@Stacknewb可能是另一个问题,所以我会创建一个新的问题。你可以在那个新问题中引用这个问题。
df = (df.melt(id_vars=['Product','Item','Region'])
.sort_values(['Region', 'variable'], ascending=[True,False])
.pivot(index=['Product', 'Item'], columns=['Region', 'variable'])
.droplevel(0, axis=1))
df
Out[1]:
Region Canada USA
variable In Stock Colour In Stock Colour
Product Item
Electronic Computer N Silver Y Black
Phone Y Black Y Black
Furniture Chair Y Black Y Black
Couch NaN NaN Y Black
Table Y Brown N Black