我有一个大型数据框,我想从中开发一个求和表。换句话说,第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个被放入variable
和Level
格式。
你不需要这个和连接的循环,你可以通过组合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
好的@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)