python-3.x - 在 Pandas 中按组均值创建大均值中心变量
问题描述
我正在尝试按组创建大均值中心变量。
样本数据为:
import pandas as pd
import numpy as np
dat = {
'group': ['1', '1', '1', '2', '2', '1', '2'],
'age': [40, 29, 34, 35, 37, 32, 36],
'weight': [150, 175, 135, 125, 189, 178, 137],
'score': [98.0, 77.0, 88.0, 78.0, 78.0, 85.0, 84.0]
}
df = pd.DataFrame(data=dat)
我正在尝试编写一个函数,该函数将按组估计数据集中所有变量的总均值中心变量。我尝试的代码如下:
def group_mean_centered(x):
d = []
d.append(x.groupby(x.iloc[:, 0]).transform('mean') - x.iloc[:,0:].mean())
d = np.asarray(d)
d_ = d.reshape(-1,len(x.columns))
dd = pd.DataFrame(d_, columns=[list(x.columns.values)])
return dd
但是,当我这样做时,它会返回一个数据框,其中分组变量 group 也被转换,而不是像括号 [] 中那样获取组
group age weight score
0 -0.428571 [1] -0.964286 3.928571 3.0
1 -0.428571 [1] -0.964286 3.928571 3.0
2 -0.428571 [1] -0.964286 3.928571 3.0
3 0.571429 [2] 1.285714 -5.238095 -4.0
4 0.571429 [2] 1.285714 -5.238095 -4.0
5 -0.428571 [1] -0.964286 3.928571 3.0
6 0.571429 [2] 1.285714 -5.238095 -4.0
只是寻找一些关于如何修复代码以保持分组变量 group 的想法,而不是对其进行转换。
解决方案
如果你对另一个解决方案没问题,你所做的也可以groupby.transform
直接完成。
out = ((df.groupby("group").transform("mean")-df.mean())
.fillna({"group":df['group']}).reindex(columns=df.columns))
print(out)
group age weight score
0 1 -0.964286 3.928571 3.0
1 1 -0.964286 3.928571 3.0
2 1 -0.964286 3.928571 3.0
3 2 1.285714 -5.238095 -4.0
4 2 1.285714 -5.238095 -4.0
5 1 -0.964286 3.928571 3.0
6 2 1.285714 -5.238095 -4.0
推荐阅读
- npm - Gulp 本地和 CLI 版本在全局和项目文件夹内不匹配
- excel - Excel自己的函数:编译错误:未定义子或函数
- react-loadable - SSR:延迟某些组件在客户端上加载(尤其是那些有窗口的组件)
- excel - Excel Vba 导出word到pdf
- excel - 为什么我的宏必须运行两次才能显示数据透视图?
- html - 如何创建提要以与我网站上的用户分享我不断变化的位置
- sql - REDCap 数据库计算不同记录中字段的平均值
- jquery - 从 jquery select 中选择一个选项时,它向右对齐,
- odoo - TypeError:模型“purchase.order”在注册表中不存在
- javascript - 检查 Javascript 数组是否包含另一个数组的任何元素的最佳方法是什么?