我有一个很大的数据框,我想从中建立一个汇总表。换句话说,第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 :(得分: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)
此循环不需要串联,可以通过将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