我有这个df文件,我是使用pandas.read_excel()从excel文件中读取的:
ID A B C A B C A B C 10 a1 b1 c1 a4 b4 c4 a7 b7 c7 20 a2 b2 c2 a5 b5 c5 a8 b8 c8 30 a3 b3 c3 a6 b6 c6 a9 b9 c9
如何更改它以使其具有df_1:
ID A B C 10 a1 b1 c1 20 a2 b2 c2 30 a3 b3 c3 10 a4 b4 c4 20 a5 b5 c5 30 a6 b6 c6 10 a7 b7 c7 20 a8 b8 c8 30 a9 b9 c9
答案 0 :(得分:2)
您可以在列中创建MultiIndex
,以通过cumcount
来计数重复的列名称,然后可以通过stack
进行重塑,最后通过reset_index
进行一些数据清理:
df = df.set_index('ID')
s = df.columns.to_series()
df.columns = [df.columns, s.groupby(s).cumcount()]
df = df.stack().sort_index(level=1).reset_index(level=1, drop=True).reset_index()
print (df)
ID A B C
0 10 a1 b1 c1
1 20 a2 b2 c2
2 30 a3 b3 c3
3 10 a4 b4 c4
4 20 a5 b5 c5
5 30 a6 b6 c6
6 10 a7 b7 c7
7 20 a8 b8 c8
8 30 a9 b9 c9
答案 1 :(得分:0)
这是使用列表理解和pd.concat
df1 = df.set_index('ID')
n=3 #The number of times your column headers repeat
pd.concat([df1.iloc[:,i:i+n] for i in range(0,df1.shape[1],n)]).reset_index()
输出:
ID A B C
0 10 a1 b1 c1
1 20 a2 b2 c2
2 30 a3 b3 c3
3 10 a4 b4 c4
4 20 a5 b5 c5
5 30 a6 b6 c6
6 10 a7 b7 c7
7 20 a8 b8 c8
8 30 a9 b9 c9