我试图创建一个报告使用Pandas透视表,目前我有下面的代码与此输出
df = pd.pivot_table(raw, values=['Shipped','Sold'], index=['Category', 'Model No'], columns=['Customer', 'Week Start Date'], aggfunc=np.sum, fill_value=0)
输出
但是我想要的输出是下面的
怎么样才能像第二份报告呢?谢谢!
zed5wv101#
使用MultiIndex.reorder_levels,然后使用sort_index和axis=1对列轴进行排序:
MultiIndex.reorder_levels
sort_index
axis=1
df.columns = df.columns.reorder_levels((1, 2, 0)) df = df.sort_index(axis=1)
示例:
np.random.seed(42) columns = pd.MultiIndex.from_product( [['Shipped', 'Sold'], ['A', 'B'], ['d1', 'd2']]) data = np.random.randint(0, 100, size=(5, 8)) df = pd.DataFrame(data, columns=columns) df Shipped Sold # level 0 A B A B # level 1 d1 d2 d1 d2 d1 d2 d1 d2 # level 2 0 51 92 14 71 60 20 82 86 1 74 74 87 99 23 2 21 52 2 1 87 29 37 1 63 59 20 3 32 75 57 21 88 48 90 58 4 41 91 59 79 14 61 61 46
# 1st level now 0th, 2nd level now 1st, 0th level now last df.columns = df.columns.reorder_levels((1, 2, 0)) df = df.sort_index(axis=1) df A B d1 d2 d1 d2 Shipped Sold Shipped Sold Shipped Sold Shipped Sold 0 51 60 92 20 14 82 71 86 1 74 23 74 2 87 21 99 52 2 1 1 87 63 29 59 37 20 3 32 88 75 48 57 90 21 58 4 41 14 91 61 59 61 79 46
为了方便后人,我还将在评论中使用stack加上unstack来包含Quang Hoang的选项:
stack
unstack
df.stack(0).unstack(-1) A B d1 d2 d1 d2 Shipped Sold Shipped Sold Shipped Sold Shipped Sold 0 51 60 92 20 14 82 71 86 1 74 23 74 2 87 21 99 52 2 1 1 87 63 29 59 37 20 3 32 88 75 48 57 90 21 58 4 41 14 91 61 59 61 79 46
不过请注意,这通常不是一个性能非常好的选项,因为它实际上必须重新塑造您的DataFrame。
1条答案
按热度按时间zed5wv101#
使用
MultiIndex.reorder_levels
,然后使用sort_index
和axis=1
对列轴进行排序:示例:
为了方便后人,我还将在评论中使用
stack
加上unstack
来包含Quang Hoang的选项:不过请注意,这通常不是一个性能非常好的选项,因为它实际上必须重新塑造您的DataFrame。