我见过类似的问题,但我的问题更直接,更抽象.
我有一个"n"行的数据帧,"n"是一个小数字.我们可以假设索引只是行号.我想把它转换成一行.
所以,例如,如果我有
A,B,C,D,E
---------
1,2,3,4,5
6,7,8,9,10
11,12,13,14,5
Run Code Online (Sandbox Code Playgroud)
我想要一个带有单行的数据帧:
A_1,B_1,C_1,D_1,E_1,A_2,B_2_,C_2,D_2,E_2,A_3,B_3,C_3,D_3,E_3
--------------------------
1,2,3,4,5,6,7,8,9,10,11,12,13,14,5
Run Code Online (Sandbox Code Playgroud)
在熊猫中最常用的方法是什么?
让我们试试这个,使用stack,to_frame和T:
df.index = df.index + 1
df_out = df.stack()
df_out.index = df_out.index.map('{0[1]}_{0[0]}'.format)
df_out.to_frame().T
Run Code Online (Sandbox Code Playgroud)
输出:
A_1 B_1 C_1 D_1 E_1 A_2 B_2 C_2 D_2 E_2 A_3 B_3 C_3 D_3 E_3
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 5
Run Code Online (Sandbox Code Playgroud)
我们需要stack和swaplevel
df1=df.stack().swaplevel()
df1.index=df1.index.map('{0[0]}_{0[1]}'.format)
df1.to_frame().T
Out[527]:
A_0 B_0 C_0 D_0 E_0 A_1 B_1 C_1 D_1 E_1 A_2 B_2 C_2 D_2 E_2
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 5
Run Code Online (Sandbox Code Playgroud)
或者你可以使用 numpy
pd.DataFrame(data=np.concatenate(df.values),index=[m+'_'+str(n) for m,n in zip(df.columns.tolist()*3,np.repeat([1,2,3],df.shape[1]))]).T
Out[551]:
A_1 B_1 C_1 D_1 E_1 A_2 B_2 C_2 D_2 E_2 A_3 B_3 C_3 D_3 E_3
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 5
Run Code Online (Sandbox Code Playgroud)
拆开并映射即
ndf = df.unstack().to_frame().T
ndf.columns = ndf.columns.map('{0[0]}_{0[1]}'.format)
A_0 A_1 A_2 B_0 B_1 B_2 C_0 C_1 C_2 D_0 D_1 D_2 E_0 E_1 E_2
0 1 6 11 2 7 12 3 8 13 4 9 14 5 10 5
Run Code Online (Sandbox Code Playgroud)
如果你想要排序的列,那么你可以做
ndf = df.unstack().to_frame().T.sort_index(1,1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2213 次 |
| 最近记录: |