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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何堆叠列和唯一值的数据帧?相关的知识,希望对你有一定的参考价值。

我有一个大型数据框,我想从中开发一个求和表。换句话说,第1列是第一个数据框的列,第2列是每列的唯一值,第3列是第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个被放入variableLevel格式。

答案

你不需要这个和连接的循环,你可以通过组合meltgroupby并使用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
另一答案

好的@Datanovice。我想出了如何使用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)

以上是关于如何堆叠列和唯一值的数据帧?的主要内容,如果未能解决你的问题,请参考以下文章

如何将新列和相应的行特定值添加到火花数据帧?

行绑定数据帧并保持唯一 ID 递增

Python - 当行索引和列都是类别时数据帧值的散点图

更改片段后如何取消显示堆叠的吐司?

如何添加取决于外键值的唯一约束? [复制]

熊猫重新索引仅对具有唯一值的索引对象有效