【问题标题】:Pandas Groupby using different agg methods for different columnsPandas Groupby 对不同的列使用不同的 agg 方法
【发布时间】:2019-05-03 14:47:05
【问题描述】:

这里是场景:

  • 我有一个包含 314 列和超过 300.000 行的大型有序数据集,用于解决机器学习问题。

  • 我想按 X 列(供应商)对数据集进行分组。

  • 一列是日期时间类型,有些列本质上是数字,并且 其他是从某些分类列中一次性编码的。

期望的输出:

  • 我想按 X 列分组,并按“均值”汇总数字列,按“最后”汇总一些列,按“总和”汇总单热编码的列。都在同一个 agg 方法上。

由于我们谈论的是 314 列数据集,我不能只创建一个包含每一列的 dict。

df_train.groupby('Supplier').agg({<some columns> : 'last', <some columns>: 'sum', <some columns>: 'mean' })

PS:我使用我想应用不同聚合的顺序对列进行排序。

【问题讨论】:

  • 也许您可以使用字典推导来为聚合创建字典?

标签: python pandas group-by


【解决方案1】:

您可以使用 select_dtypes 获取数字列,并在字典理解中使用这些列。

numeric_cols = df_train.select_dtypes('numeric').columns

agg_dict = {c: 'sum' if c in numeric_cols else 'last' for c in df_train.columns}

grouped = df_train.groupby('Supplier').agg(agg_dict)

关于您的 one-hot 编码列,您需要提供更多信息来说明如何识别它们。

【讨论】:

  • 我正在尝试在这些方面工作。问题是:数字本质上我想应用“平均值”和单热编码的(也是数字)我想应用“总和”:(
  • 您能否在对单热编码列进行编码时对其进行跟踪?
  • 我正在考虑一个不太优雅的解决方案:使用 3 种不同的 agg 方法将 by 分组为 3 个不同的数据集,然后合并所需的列。谢谢,@asoungtoruin
  • 如何选择要编码的列?你可以在做的时候列出它们吗?
  • df_train.columns[1:7] 应该使用“last”进行聚合 df_train.columns[7:] 应该使用“sum”进行聚合
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 2020-12-05
  • 2015-02-10
  • 2020-03-09
  • 1970-01-01
  • 2021-10-25
相关资源
最近更新 更多