重新安排熊猫数据帧

时间:2018-01-28 15:13:01

标签: python pandas dataframe

是否可以转换数据帧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

2 个答案:

答案 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