python-3.x - 在 Python 中创建“无泄漏”变量?
问题描述
我有一个包含数千个观察值的 pandas 数据框,我想在 Python 中创建“无泄漏”变量。因此,我正在寻找一种方法来计算变量的组特定平均值,而无需在第 i 行中进行单个观察。例如:
| Group | Price | leakage-free Group Mean |
-------------------------------------------
| 1 | 20 | 25 |
| 1 | 40 | 15 |
| 1 | 10 | 30 |
| 2 | ... | ... |
我想用几个变量来做到这一点,并且我想以这种方式创建均值、中值和方差,因此计算速度快的方法可能会很好。如果一个组只有一行,我想在无泄漏变量中输入 0。
由于我是 Python 的初学者,所以一些代码可能会很有帮助。谢谢你!!
解决方案
单线:
df = pd.DataFrame({'Group': [1,1,1,2], 'Price':[20,40,10,30]})
df['lfgm'] = df.groupby('Group').transform(lambda x: (x.sum()-x)/(len(x)-1)).fillna(0)
print(df)
输出:
Group Price lfgm
0 1 20 25.0
1 1 40 15.0
2 1 10 30.0
3 2 30 0.0
更新:
对于中位数和方差(不幸的是,不是单行):
df = pd.DataFrame({'Group': [1,1,1,1,2], 'Price':[20,100,10,70,30]})
def f(x):
for i in x.index:
z = x.loc[x.index!=i, 'Price']
x.at[i, 'mean'] = z.mean()
x.at[i, 'median'] = z.median()
x.at[i, 'var'] = z.var()
return x[['mean', 'median', 'var']]
df = df.join(df.groupby('Group').apply(f))
print(df)
输出:
Group Price mean median var
0 1 20 60.000000 70.0 2100.000000
1 1 100 33.333333 20.0 1033.333333
2 1 10 63.333333 70.0 1633.333333
3 1 70 43.333333 20.0 2433.333333
4 2 30 NaN NaN NaN
推荐阅读
- ios - 在 SpriteKit 中允许触摸传播
- reactjs - 如何修复:“错误:超出最大更新深度”
- ruby-on-rails - Rails 5 API:自定义隐藏响应器,将处理操作返回的值
- c# - 如何使用 Microsoft.AspNetCore.ResponseCompression 压缩所有响应
- javascript - Nuxt 和 Axios - javaScript 堆内存不足
- c++ - 读取对象数组时编译时出错
- safari - Safari 开发工具中的断点会自动启用
- c# - C#过滤坐标范围
- ansible - Ansible 从 github 运行剧本
- mysql - mysql 错误:FUNCTION asterisk.SUM 不存在。(阿帕奇超集)