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

时间:2019-04-14 10:04:22

标签: pandas data-manipulation

我有一个很大的数据框,我想从中建立一个汇总表。换句话说,第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列以variableLevel格式显示。

2 个答案:

答案 0 :(得分:1)

好的@Datanovice。我想出了如何使用带pd.melt的for循环来做到这一点。

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)

答案 1 :(得分: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