pandas 展平多索引熊猫数据框,其中列名成为值
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/46306786/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 04:29:17 来源:igfitidea点击:
Flatten multi-index pandas dataframe where column names become values
提问by Dnaiel
Let us say I have the following dataframe:
假设我有以下数据框:
import pandas as pd
df = pd.DataFrame(data={'Status' : ['green','green','red','blue','red','yellow','black'],
'Group' : ['A','A','B','C','A','B','C'],
'City' : ['Toronto','Montreal','Vancouver','Toronto','Edmonton','Winnipeg','Windsor'],
'Sales' : [13,6,16,8,4,3,1]})
df.drop('Status',axis=1,inplace=True)
ndf = pd.pivot_table(df,values=['Sales'],index=['City'],columns=['Group'],fill_value=0,margins=False)
The result looks like this:
结果如下所示:
In [321]: ndf
Out[321]:
Sales
Group A B C
City
Edmonton 4 0 0
Montreal 6 0 0
Toronto 13 0 8
Vancouver 0 16 0
Windsor 0 0 1
Winnipeg 0 3 0
How can I flatten it such that it becomes a single level data frame but with a column specifying the group?
我怎样才能将它展平,使其成为一个单级数据框,但有一列指定了组?
I.e., the result should be:
即,结果应该是:
City group sales
Edmonton A 4
Edmonton B 0
Edmonton C 0
Montreal A 6
Montreal B 0
Montreal C 0
Toronto A 13
Toronto B 0
Toronto C 8
Vancouver A 0
Vancouver B 16
Vancouver C 0
Windsor A 0
Windsor B 0
Windsor C 1
Winnipeg A 0
Winnipeg B 3
Winnipeg C 0
回答by Zero
Use stack
and reset_index
In [1260]: ndf.stack().reset_index()
Out[1260]:
City Group Sales
0 Edmonton A 4
1 Edmonton B 0
2 Edmonton C 0
3 Montreal A 6
4 Montreal B 0
5 Montreal C 0
6 Toronto A 13
7 Toronto B 0
8 Toronto C 8
9 Vancouver A 0
10 Vancouver B 16
11 Vancouver C 0
12 Windsor A 0
13 Windsor B 0
14 Windsor C 1
15 Winnipeg A 0
16 Winnipeg B 3
17 Winnipeg C 0
回答by gold_cy
This is easily accomplished as such:
这很容易实现:
ndf.stack().reset_index()
City Group Sales
0 Edmonton A 4
1 Edmonton B 0
2 Edmonton C 0
3 Montreal A 6
4 Montreal B 0
5 Montreal C 0
6 Toronto A 13
7 Toronto B 0
8 Toronto C 8
9 Vancouver A 0
10 Vancouver B 16
11 Vancouver C 0
12 Windsor A 0
13 Windsor B 0
14 Windsor C 1
15 Winnipeg A 0
16 Winnipeg B 3
17 Winnipeg C 0