是否可以转换数据帧df
df=pd.DataFrame(data=[['a1',2,3],['b1',4,5],['c1',6,7],['a1',8,9],['b1',10,11],['c1',12,13]],columns=['A','B','C'],index=[35,35,35,41,41,41])
df
Out[51]:
A B C
35 a1 2 3
35 b1 4 5
35 c1 6 7
41 a1 8 9
41 b1 10 11
41 c1 12 13
进入数据帧df2?
df2=pd.DataFrame(data=[[2,4,6],[3,5,7],[8,10,12],[9,11,13]],columns=['a1','b1','c1'],index=[35,35,41,41])
df2
Out[52]:
a1 b1 c1
35 2 4 6
35 3 5 7
41 8 10 12
41 9 11 13
答案 0 :(得分:0)
编辑:稍微更通用的解决方案(无法保证速度。)
df.index.rename("idx", inplace=True)
f = lambda x, col: df.pivot_table(values=col, columns="A", index="idx")
pd.concat(map(f, [df for _ in range(df.shape[1]-1)], df.columns[1:])).sort_index()
在B
列和C
列上使用pivot_table
两次。然后使用concat
,最后使用sort_index
。
df = pd.DataFrame(data=[['a1',2,3],['b1',4,5],['c1',6,7],['a1',8,9],['b1',10,11],['c1',12,14]],columns=['A','B','C'],index=[35,35,35,41,41,41])
df.index.rename("idx", inplace=True)
df2 = pd.concat([df.pivot_table(values="B", columns="A", index="idx"),
df.pivot_table(values="C", columns="A", index="idx")])
df2.sort_index()
A a1 b1 c1
idx
35 2 4 6
35 3 5 7
41 8 10 12
41 9 11 14
为了说明,df.pivot_table(values="C", columns="A", index="idx")
将产生
A a1 b1 c1
idx
35 3 5 7
41 9 11 14
答案 1 :(得分:0)
堆叠和拆散的组合:
df.set_index('A', append=True).stack().unstack('A').reset_index(level=1, drop=True)
Out:
A a1 b1 c1
35 2 4 6
35 3 5 7
41 8 10 12
41 9 11 13