python - Pandas Groupby 对不同的列使用不同的 agg 方法
问题描述
这是场景:
对于 ML 问题,我有一个包含 314 列和超过 300.000 行的大型有序数据集。
我想按 X 列(供应商)对数据集进行分组。
- 一列是日期时间类型,一些列本质上是数字的,而另一些列是从某些分类列中一次性编码的。
期望的输出:
- 我想按 X 列分组,并按“均值”汇总数字列,按“最后”汇总一些列,按“总和”汇总单热编码的列。都在同一个 agg 方法上。
因为我们谈论的是一个 314 列的数据集,所以我不能只创建一个包含每一列的字典。
df_train.groupby('Supplier').agg({<some columns> : 'last', <some columns>: 'sum', <some columns>: 'mean' })
PS:我使用我想应用不同聚合的顺序对列进行排序。
解决方案
您可以使用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 编码列,您需要提供有关如何识别它们的更多信息。
推荐阅读
- express - 如何在应用程序启动时在 MongoDB 中插入初始数据?
- postgresql - 从文件制作者快照文件映射外部数据源记录 ID
- mysql - 查询 7 个表,其中一个表中的值作为返回结果中的列标题
- wordpress - WordPress API:加载资源失败:服务器响应状态为 401(未授权)
- sql - 从分组依据中排除列
- android - Flutter:在 Whatsapp 和 Facebook 共享图像时无法在预览中显示图像
- mysql - 查询似乎间歇性地在 MySQL/Sequelize 上超时
- c# - 需要帮助从拇指驱动器上执行 Windows 窗体 C# 应用程序
- spring - 如何在 SimpleJDBCTemplate 中获取连接对象
- lua - 如何获得 Corona Simulator 正在运行的操作系统?