gpt4 book ai didi

python - pandas 数据帧上的数据透视表操作

转载 作者:行者123 更新时间:2023-12-01 04:13:25 27 4
gpt4 key购买 nike

我有以下内容。 pandas 中的数据框:

df

DAY YEAR REGION VALUE
1 2000 A 12
2 2000 A 10
3 2000 A 13
6 2000 A 15
1 2001 A 3
2 2001 A 40
3 2001 A 83
4 2001 A 95
1 2000 B 124
3 2000 B 102
5 2000 B 131
8 2000 B 150
1 2001 B 30
5 2001 B 4
8 2001 B 8
9 2001 B 12

我想创建一个新的数据框,使每一行包含“年份”和“区域”的不同组合。它还包含一列,该列汇总该年份、地区组合的值,另一列提供该年份、地区组合的最大值。结果应如下所示:

YEAR    REGION  SUM_VALUE   MAX_VALUE
2000 A 50 15
2001 A 221 95
2000 B 507 150
2001 B 54 30

这就是我正在做的事情:

new_df = pandas.DataFrame()

for yr in df.YEAR.unique():
for reg in df.REGION.unique():
new_df = new_df.append({'YEAR': yr}, ignore_index=True)
new_df = new_df.append({'REGION: reg}, ignore_index=True)

但是,这每次都会创建一个新行,并且由于 xtra for 循环,这并不是很 Pythonic。有更好的方法吗?

请注意,这是一个玩具数据框,实际数据框有几个 VALUE 列。建议的解决方案应该可以扩展,而无需手动指定 VALUE 列的名称。

最佳答案

groupby在“YEAR”和“REGION”上,并传递要使用 agg 调用的函数列表:

In [9]:
df.groupby(['YEAR','REGION'])['VALUE'].agg(['sum','max']).reset_index()

Out[9]:
YEAR REGION sum max
0 2000 A 50 15
1 2000 B 507 150
2 2001 A 221 95
3 2001 B 54 30

编辑:

如果您想命名聚合列,请传递一个字典:

In [18]:
df.groupby(['YEAR','REGION'])['VALUE'].agg({'sum_VALUE':'sum','max_VALUE':'max'}).reset_index()

Out[18]:
YEAR REGION max_VALUE sum_VALUE
0 2000 A 15 50
1 2000 B 150 507
2 2001 A 95 221
3 2001 B 30 54

关于python - pandas 数据帧上的数据透视表操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34618717/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com