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

标签 python pandas

我有以下内容。 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/

相关文章:

python - 如何使用 pytest-cov 生成覆盖报告并打印到终端?

python - 如何在交互式 Python 中显示字符串格式规范帮助

python - 使用 pandas.read_csv 分隔列

python - 随机清空数据框中值的最有效方法

python - 通过在 groupby 之后删除 nan 来合并 DataFrame 中的行

python - 尝试基于嵌套模型外键过滤 django View 序列化器

python - 你如何检查列表的项目是否等于同一列表中的另一个项目

python - 根据 Django 模型中的字段值选择方法

python - 如何找出 Python 警告的来源

python - 读取 CSV 列,如果满足要求,写入单元格