熊猫:在每组中创建均值偏离的列

T_T

考虑一下DataFramePython中的以下内容

import pandas as pd
df = pd.DataFrame({'id':[0]*3+[1]*3,'y':np.random.randn(6),'x':np.random.randn(6)})

这使

   id         y         x
0   0  0.721757  1.595646
1   0  0.359601  1.128473
2   0  1.134922  2.317929
3   1  0.290152 -1.901336
4   1  0.128742  0.982683
5   1  0.556914  0.745208

请注意,yx根据分组id我要创建以下内容DataFrame

   id         y         x      y_md      x_md
0   0  0.721757  1.595646 -0.017003 -0.085037
1   0  0.359601  1.128473 -0.379159 -0.552209
2   0  1.134922  2.317929  0.396162  0.637246
3   1  0.290152 -1.901336 -0.035117 -1.843521
4   1  0.128742  0.982683 -0.196527  1.040498
5   1  0.556914  0.745208  0.231644  0.803023

哪里

  • y_md包含偏离其组平均值(id= 01)的值
  • x_md包含偏离其组平均值(id= 01)的值

我想出的是

df_g = df.groupby('id')
yy = pd.Series( df['y'].values - df_g['y'].mean().repeat(3).values )
xx = pd.Series( df['x'].values - df_g['x'].mean().repeat(3).values )
pd.concat([df,yy.rename('y_md'), xx.rename('x_md')],axis=1)

但这对我来说并不好。我想知道是否有一个优雅的班轮或类似的结果吗?多谢您的协助。

耶斯列尔

使用GroupBy.transform用于处理多个栏目,通过减DataFrame.sub,改列名通过DataFrame.add_suffix并追加到原来的DataFrame.join

c = ['x','y']
df = df.join(df[c].sub(df.groupby('id')[c].transform('mean')).add_suffix('_md'))
print (df)
   id         y         x      x_md      y_md
0   0  0.721757  1.595646 -0.085037 -0.017003
1   0  0.359601  1.128473 -0.552210 -0.379159
2   0  1.134922  2.317929  0.637246  0.396162
3   1  0.290152 -1.901336 -1.843521 -0.035117
4   1  0.128742  0.982683  1.040498 -0.196527
5   1  0.556914  0.745208  0.803023  0.231645

或者可以分配新的列名称:

df[['x_md','y_md']] = df[['x','y']].sub(df.groupby('id')[['x','y']].transform('mean'))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章