我有一个excel文件如下:
ID wk48 wk49 wk50 wk51 wk52 wk1 wk2
1123 10 22 233 2 4 22 11
1198 9 4 44 23 34 5 234
101 3 6 3 43 33 34 78
我想在python中输出如下
1123 wk48 10
1123 wk49 22
1123 wk50 233
1123 wk51 2
1123 wk52 4
1123 wk1 22
1123 wk2 11
1198 wk48 9
1198 wk49 4
1198 wk50 44
1198 wk51 23
1198 wk52 34
1198 wk1 5
1198 wk2 234
任何建议
答案 0 :(得分:2)
我要做的第一件事是将ID
设置为您的索引:
df.set_index('ID',inplace=True)
接下来,您可以使用以下命令重新定位数据框:
df = df.stack().reset_index()
print df
-------------------------------------------
Output:
ID level_1 0
0 1123 wk48 10
1 1123 wk49 22
2 1123 wk50 233
3 1123 wk51 2
4 1123 wk52 4
5 1123 wk1 22
6 1123 wk2 11
7 1198 wk48 9
8 1198 wk49 4
9 1198 wk50 44
10 1198 wk51 23
11 1198 wk52 34
12 1198 wk1 5
13 1198 wk2 234
14 101 wk48 3
15 101 wk49 6
16 101 wk50 3
17 101 wk51 43
18 101 wk52 33
19 101 wk1 34
20 101 wk2 78
答案 1 :(得分:1)
阅读pandas中的数据:
In[1]:
import pandas as pd
df = pd.read_excel('yourfile.xlsx', index_col=0)
然后使用DataFrame.stack
将列移动到索引:
In [2]: s = df.stack()
# Rename the index names for cleaner output
s.index.names = ['ID','Week']
你会得到一个像你想要的pd.Series:
In [3]: s.head(10)
Out[3]:
ID Week
1123 wk48 10
wk49 22
wk50 233
wk51 2
wk52 4
wk1 22
wk2 11
1198 wk48 9
wk49 4
wk50 44
dtype: int64
如果您希望将其作为数据框返回:
In [4]: s.name = 'Value'
df = s.to_frame()
然后,您可以将其导出回Excel,例如:
In [5]: df.to_excel('newfile.xslx')
或者,如果您不希望在Excel中对ID
进行分组(合并单元格),则可以执行以下操作:
In [6]: df.reset_index().to_excel('newfile.xlsx', index=False)