pandas - Pandas 通过基于其他列值的平均值来删除列
问题描述
这是我拥有的数据类型的模型:
label1 label2 repetition value
0 1 4 0 0.831011
1 1 9 0 0.698217
2 4 4 0 0.885272
3 4 9 0 0.009940
4 8 4 0 0.816476
5 8 9 0 0.069162
6 1 4 1 0.988980
7 1 9 1 0.892004
8 4 4 1 0.962106
9 4 9 1 0.367945
10 8 4 1 0.624772
11 8 9 1 0.694558
它可以像这样生成:
import random
import pandas as pd
data = []
for repe in [0,1]:
for label1 in [1,4,8]:
for label2 in [4,9]:
value = random.random()
data.append([label1, label2, repe, value])
data=pd.DataFrame(data, columns=['label1', 'label2', 'repetition', 'value'])
我想生成一个带有列的新 DataFramelabel1
和label2
,value
其中 value 取所有重复的平均值。这是实现它的一种方法:
data2 = data.groupby(['label1', 'label2'])['value'].mean().reset_index()
但是在我的实际情况中,我有更多的标签列,所以我认为代码不清楚,因为读者必须推断缺失的列repetition
是用于平均值的列。有没有更直接的方法?
解决方案
我在这里问了一个非常相似的问题:Use labels by which *not* to group in pandas groupby。不过,我的标签是一个分层索引。
我得到的答案是
df.groupby(df.index.droplevel('repetition')).mean()
哪个更好,但仍然不是很优雅。我通常使用
df.groupby(df.columns.difference(['repetition']).mean()
至少可以传达意图。
如果您找到解决此问题的好方法,请告诉我;)
推荐阅读
- sql - 蔚蓝虚拟机 | SqlIaaSExtension.Service.exe 已启动重启
- javascript - 未定义 JQuery UI 组合框
- laravel - 如何通过单击按钮同时更新和插入多行数据(axios + laravel + vuejs)
- python-3.x - 加入相似的 OrderID 并聚合购买项目 Pandas/DataFrame
- c - BUILD_BUG_ON_ZERO 在简单的用户空间应用程序中不起作用
- c# - ASP.Net C#在GridView中选择行而不更新整个页面
- python - 将 Csv models.FileField 输入到 pandas 对象中
- jquery - 为什么我通过索引而不是 .val 选择选项功能不起作用?
- java - 如何修复“JRException:编译报告java源文件时出错”错误?
- mysql - MYSQL 在一个圆圈位置上选择并且只有某些结果