将多列数据框更改为单列而不丢失 python 中的信息

Changing a many column dataframe to a single column without losing information in python

我想在比较多个数据帧时查看单元格值的变化。这些数据框由 JSON 数据组成,形成多列 table,我无法轻易更改此数据源。假设有 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']

给出这个 table

     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

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

有人可以告诉我如何使用 pandas 执行此操作吗? 如果需要第三列也没关系,即:

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

尝试这样的事情

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']

df_us = df.unstack().reset_index()
df_us.columns = [i for i in range(df_us.shape[1])]

df_us = df_us.sort_values(by=2)

使用DataFrame.stack with Series.to_frame,然后使用map:

MultiIndex展平为index
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