python - 聚合函数优化
问题描述
我有一个名为 customer_base 的数据集,包含超过 800K 行,如下所示:
ID | 年龄 | 性别 | 职业 |
---|---|---|---|
1 | 64 | 101 | “occ1” |
2 | 64 | 100 | “occ2” |
2 | 66 | 100 | 楠 |
2 | 楠 | 100 | “occ2” |
3 | 楠 | 101 | “occ3” |
3 | 楠 | 楠 | 楠 |
3 | 32 | 楠 | 楠 |
. | . | . | . |
在分组操作之后,所需的版本应该如下所示:
ID | 年龄 | 性别 | 职业 |
---|---|---|---|
1 | 64 | 101 | “occ1” |
2 | 66 | 100 | “occ2” |
3 | 32 | 101 | “occ3” |
. | . | . | . |
以前我尝试过像下面这样的代码示例来使表格尽可能干净,但是花了太多时间。现在我需要一个更快的函数来获取列的任何可用值occupation
。
customer_base.groupby("ID",
as_index=False).agg({"GENDER":"max",
"AGE":"max",
"OCCUPATION":lambda x: np.nan if len(x[x.notna()])==0 else x[x.notna()].values[0]})
提前感谢您的优化想法,抱歉可能出现重复问题
解决方案
用于GroupBy.first
第一个非NaN
s 值:
df = customer_base.groupby("ID", as_index=False).agg({"AGE":"max",
"GENDER":"max",
"OCCUPATION":'first'})
print (df)
ID AGE GENDER OCCUPATION
0 1 64.0 101.0 "occ1"
1 2 66.0 100.0 "occ2"
2 3 32.0 101.0 "occ3"
推荐阅读
- shell - Ansible 错误与 myhost1 的共享连接已关闭。使用原始模块时
- php - 根据php中的另一个数组从数组中选择一个值
- protocol-buffers - 我可以将消息字段从枚举更新为字符串,并保留其名称吗?
- apache-kafka - 故障转移如何在 kafka 中工作以及保持复制因子
- amazon-web-services - 具有 SageMaker 服务的 AWS boto3 资源代理
- python - 由于 pip 版本/python 版本错误,无法在 WSL 中安装 Apache Airflow
- python - 如何控制 ray.serve 的总内存?
- algorithm - 理解按位二进制组合算法
- c++ - 为什么比较范围枚举是合法的
- powershell - 使用 powershell 在发生故障时通过了 Gitlab-ci 作业