代码之家  ›  专栏  ›  技术社区  ›  Jordan

如何使列和唯一值的数据帧堆叠?

  •  0
  • Jordan  · 技术社区  · 7 年前

    我有一个大数据框架,我想从中开发一个求和表。换句话说,列1是第一个数据帧的列,列2是每个列的唯一值,列3到。。。是我选择的不同变量的总和。如下所示:

    Variable   Level   Summed_Column
    

    下面是一些示例代码:

    data = {"name": ['bob', 'john', 'mary', 'timmy']
           , "age": [32, 32, 29, 28]
           , "location": ['philly', 'philly', 'philly', 'ny']
           , "amt": [100, 2000, 300, 40]}
    
    df = pd.DataFrame(data)
    
    df.head()
    

    Variable     Level     Summed_Column
    Name         Bob       100
    Name         john      2000
    Name         Mary      300
    Name         timmy     40
    age          32        2100
    age          29        300
    age          29        40
    location     philly    2400
    location     ny        40
    

    我甚至不知道从哪里开始。实际的数据帧有32列,其中4列将被求和,28列放入 variable Level

    0 回复  |  直到 7 年前
        1
  •  1
  •   Erfan    7 年前

    你不需要一个循环来实现这个和连接,你可以通过组合 melt 具有 groupby 使用 agg 方法:

    final = df.melt(value_vars=['name', 'age', 'location'], id_vars='amt')\
              .groupby(['variable', 'value']).agg({'amt':'sum'})\
              .reset_index()
    

    结果是:

    print(final)
       variable   value   amt
    0       age      28    40
    1       age      29   300
    2       age      32  2100
    3  location      ny    40
    4  location  philly  2400
    5      name     bob   100
    6      name    john  2000
    7      name    mary   300
    8      name   timmy    40
    
        2
  •  1
  •   Jordan    7 年前

    好的@数据新手。我用for循环w找到了这个方法/ pd.melt .

    id = ['name', 'age', 'location']
    
    final = pd.DataFrame(columns = ['variable', 'value', 'amt'])
    
    for i in id:
        table = df.groupby(i).agg({'amt':'sum'}).reset_index()
        table2 = pd.melt(table, value_vars = i, id_vars = ['amt'])
        final = pd.concat([final, table2])
    
    print(final)