问:Python(pandas或其他) - 我需要从多行"几列"到"一行"多列"展平"数据文件

Rya*_*ool 4 python excel pandas

我需要将数据文件从多行,几列到一行多列"展平".

我目前在pandas中有一个数据帧(从Excel加载),最终需要改变数据的显示方式,这样我就可以以逻辑方式累积大量数据.下表是试图说明我的要求.

从:

         1      2
Ryan     0.706  0.071
Chad     0.151  0.831
Stephen  0.750  0.653
Run Code Online (Sandbox Code Playgroud)

至:

1_Ryan  1_Chad  1_Stephen  2_Ryan  2_Chad  2_Stephen
0.706   0.151   0.75       0.071   0.831   0.653
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

piR*_*red 7

一行,为了好玩

df.unstack().pipe(
    lambda s: pd.DataFrame([s.values], columns=s.index.map('{0[0]}_{0[1]}'.format))
)

   1_Ryan  1_Chad  1_Stephen  2_Ryan  2_Chad  2_Stephen
0   0.706   0.151       0.75   0.071   0.831      0.653
Run Code Online (Sandbox Code Playgroud)

  • df.unstack().pipe(lambda s:pd.DataFrame([s.values],columns = s.index.map(''.join)))为什么要使用格式而不是连接?哦,只是这些数字是整数而不是字符串. (2认同)

Sco*_*ton 5

让我们使用stack,swaplevel,to_frame,和T:

df_out = df.stack().swaplevel(1,0).to_frame().T.sort_index(axis=1)
Run Code Online (Sandbox Code Playgroud)

或者更好的是,(使用@piRSquared unstack解决方案)

df_out = df.unstack().to_frame().T

df_out.columns = df_out.columns.map('{0[0]}_{0[1]}'.format)

df_out
Run Code Online (Sandbox Code Playgroud)

输出:

   1_Chad  1_Ryan  1_Stephen  2_Chad  2_Ryan  2_Stephen
0   0.151   0.706       0.75   0.831   0.071      0.653
Run Code Online (Sandbox Code Playgroud)