我正在使用熊猫,并试图将数据帧的第一行转换为列,我试过了堆栈()函数,但它看起来像F%#¤ed。我不能真正使用堆栈(),因为我有不同的标题列。比方说,你的数据帧看起来如下:(红框:我的数据框看起来像(黄框:我多么希望我的数据框的样子) 如何将数据帧的第一行转换为列
我gratefull如果你能帮助我
。干杯,
我正在使用熊猫,并试图将数据帧的第一行转换为列,我试过了堆栈()函数,但它看起来像F%#¤ed。我不能真正使用堆栈(),因为我有不同的标题列。比方说,你的数据帧看起来如下:(红框:我的数据框看起来像(黄框:我多么希望我的数据框的样子) 如何将数据帧的第一行转换为列
我gratefull如果你能帮助我
。干杯,
我想你需要:
df = df.stack().rename_axis(('a','b','c')).reorder_levels([2,0,1]).sort_index()
print (df)
c a b
2014 A A1 1
A1 9
B B1 9
B2 1
2015 A A1 5
A1 4
B B1 1
B2 7
2016 A A1 5
A1 1
B B1 6
B2 7
dtype: int64
如果需要columns
从Multiindex
:
df = df.stack()
.rename_axis(('a','b','c'))
.reorder_levels([2,0,1])
.sort_index()
.reset_index(name='count')
print (df)
c a b count
0 2014 A A1 1
1 2014 A A1 9
2 2014 B B1 9
3 2014 B B2 1
4 2015 A A1 5
5 2015 A A1 4
6 2015 B B1 1
7 2015 B B2 7
8 2016 A A1 5
9 2016 A A1 1
10 2016 B B1 6
11 2016 B B2 7
编辑:
有你需要的第一和第二列转换为Multiindex
通过参数index_col
问题:
tab3 = "C:\\Users\\abk29\\NordicMontlyDemand\\NordicDY\\Book1.xls"
df = pd.read_excel(tab3, sheetname="Sheet1", skiprows=2, index_col=[0,1])
print (df)
2016 2017 2018
Unnamed: 1
A A1 1 1 1
A2 2 2 2
B B1 3 3 3
B2 4 4 4
df = df.stack().rename_axis(('a','b','c')).reorder_levels([2,0,1]).sort_index()
print (df)
c a b
2016 A A1 1
A2 2
B B1 3
B2 4
2017 A A1 1
A2 2
B B1 3
B2 4
2018 A A1 1
A2 2
B B1 3
B2 4
dtype: int64
IIUC:
In [199]: df = pd.DataFrame(np.random.randint(5, size=(5,3)), columns=list('abc'))
In [200]: df
Out[200]:
a b c
0 4 4 0
1 3 3 0
2 4 3 3
3 3 2 0
4 1 0 4
In [201]: df.columns
Out[201]: Index(['a', 'b', 'c'], dtype='object')
In [202]: df, df.columns, df.columns.name = df.iloc[1:], df.iloc[0].astype(str), None
In [203]: df
Out[203]:
4 4 0
1 3 3 0
2 4 3 3
3 3 2 0
4 1 0 4
In [204]: df.columns
Out[204]: Index(['4', '4', '0'], dtype='object')
你可以添加一些样品? – jezrael
还是你需要'df = df.iloc [0] .to_frame()'? – jezrael