首页 > 解决方案 > 将多列数据框更改为单列而不会丢失python中的信息

问题描述

我想在比较多个数据帧时看到单元格值的变化。这些数据框是由 JSON 数据形成的,这些数据形成了许多列表,我不能轻易更改这个数据源。假设有 10 个数据帧,10 行和 10 列(相同标记)。我想通过将每个数据框变成 100 行和 1 列来比较信息。

对于 3x3 示例:

import pandas as pd
data = [{'a':1,'b':2,'c':3},{'a':10,'b':20,'c':30},{'a':100,'b':200,'c':300}]
df = pd.DataFrame(data)
df.index = ['x','y','z']

给出这张表

     a    b    c
x    1    2    3
y   10   20   30
z  100  200  300

但我想拥有:

    col
xa  1
xb  2
xc  3
ya  10
yb  20
yc  30
za  100
zb  200
zc  300

这样我就可以添加许多列并比较值的变化。

有人可以建议我如何使用熊猫来做到这一点吗?如果需要第三个列是可以的,即:

1  2  3
x  a  1
x  b  2
x  c  3
y  a  10
y  b  20
y  c  30
z  a  100
z  b  200
z  c  300

标签: pythonpandasdimensions

解决方案


使用DataFrame.stackwithSeries.to_frame然后展平MultiIndexindexwith map

df_us = df.stack().to_frame('col')
df_us.index = df_us.index.map(lambda x: f'{x[0]}{x[1]}')
print (df_us)
    col
xa    1
xb    2
xc    3
ya   10
yb   20
yc   30
za  100
zb  200
zc  300

对于 3 列:

df_us = df.stack().reset_index()
df_us.columns = [0,1,2]
print (df_us)
   0  1    2
0  x  a    1
1  x  b    2
2  x  c    3
3  y  a   10
4  y  b   20
5  y  c   30
6  z  a  100
7  z  b  200
8  z  c  300

推荐阅读