【问题标题】:Changing a many column dataframe to a single column without losing information in python将多列数据框更改为单列而不会丢失python中的信息
【发布时间】:2020-11-20 11:16:36
【问题描述】:

我想在比较多个数据帧时查看单元格值的变化。这些数据框是由 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

【问题讨论】:

    标签: python pandas dimensions


    【解决方案1】:

    DataFrame.stackSeries.to_frame 一起使用,然后将MultiIndexmap 扁平化为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
    

    【讨论】:

    • 是的,.stack 命令正是我想要的,谢谢。
    【解决方案2】:

    试试这样的

    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)
    
    

    【讨论】:

      猜你喜欢
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 2019-04-26
      • 1970-01-01
      • 2022-12-01
      • 2021-07-31
      • 1970-01-01
      相关资源
      最近更新 更多