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

问题描述 投票:1回答:2

我有一个大型数据框,我想从中开发一个求和表。换句话说,第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格式。

pandas data-manipulation
2个回答
1
投票

你不需要这个和连接的循环,你可以通过组合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

1
投票

好的@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)
© www.soinside.com 2019 - 2024. All rights reserved.