python - 计算组的平均值,同时保留对象类型的列
问题描述
我有一个如下数据框:
col1 col2 col3 col4 col5...
g1 x1 x2 x3 x4
g1 x5 x6 x7 x8
g2 y1 y2 y3 y4
g2 y5 y6 y7 y8
...
其中 col1/col2 属于“object”类型,col3/col4/col5 属于“float”类型
我想先 groupby col1 然后计算 col3/col4/col5 的平均值,同时将 col2 保留在结果数据框中。通过“保持”,我只是指保持原样,甚至不计算平均值,这是不可能的,因为它是“对象”类型。每组col2每一行的实际值都是一样的,随便挑一个都行。
如果我以这种方式天真地这样做:
df.groupby(["col1"]).mean().reset_index()
那么结果数据框将不会保留 col2,col2 消失了。也就是说,结果将如下所示:
col1 col3 col4 col5...
g1 (x2+y2)/2 (x3+y3)/2 (x4+y4)/2
g2 (x6+y6)/2 (x7+x8)/2 (x8+y8)/2
如何在保持 col2(保持不变)的同时计算 col3/col4/col5 的平均值?
解决方案
有很多方法可以选择“col2”的值
- 根据需要生成平均值
- 将 pack 加入要保留的列,选择第一个
s = 20
df = pd.DataFrame({"col1":np.random.choice(["g1","g2","g3"],s),
"col2":np.random.choice(["constant"],s),
**{f"col{i+3}":np.random.randint(1,10,s) for i in range(3)}})
df.groupby("col1").mean().join(df.groupby(["col1"])["col2"].first() ).reset_index(drop=True)
col3 | col4 | col5 | col2 | |
---|---|---|---|---|
0 | 5.875 | 6.75 | 6.75 | 持续的 |
1 | 7 | 5.33333 | 6 | 持续的 |
2 | 4.77778 | 4.88889 | 3.66667 | 持续的 |
推荐阅读
- php - 如何解决在执行“composer install”时找不到受支持的加密?
- amazon-web-services - 使用部署脚本时出现 AWS 身份验证问题
- kubernetes - 修改 pod 映像时,Replicaset 不会更新 pod
- c++ - 红帽:使用
编译正常但链接器找不到 __atomic_store_16; 什么图书馆? - php - 我们可以为 OpenSSL ECC 拥有多个公钥和一个私钥吗?
- angularjs - .withButtons() 不是函数
- android - 在android studio中重构移动文件时出现意外的元素类型类
- mysql - 如何连接日期并在日期月份下检索
- javascript - 递增 localStorage 对象名称以存储来自输入的数据
- microservices - 事件溯源和 CQRS 如何帮助解耦微服务?