Python 用于多列的按多索引分组

Python 用于多列的按多索引分组,python,pandas,Python,Pandas,如何将数据帧的格式从标准的单行切换到多索引列?我试过和groupby一起玩,但似乎效率不高 +------------+----------+--------+----------+--------+ | Product | Item | Region | In Stock | Colour | +------------+----------+--------+----------+--------+ | Electronic | Phone | Canada | Y

如何将数据帧的格式从标准的单行切换到多索引列?我试过和groupby一起玩,但似乎效率不高

+------------+----------+--------+----------+--------+
|  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