2 回答

TA貢獻1795條經驗 獲得超7個贊
用于GroupBy.transform
處理多列,減去 by DataFrame.sub
,更改列名 byDataFrame.add_suffix
并附加到原始 by 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'))

TA貢獻1803條經驗 獲得超6個贊
設置id為索引,按索引分組并從 df 中減去分組的平均值:
df = df.set_index("id")
df[['y_md','x_md']] = df.sub(df.groupby("id").agg("mean"))
df
y x y_md x_md
id
0 0.721757 1.595646 -0.017003 -0.085037
0 0.359601 1.128473 -0.379159 -0.552210
0 1.134922 2.317929 0.396162 0.637246
1 0.290152 -1.901336 -0.035117 -1.843521
1 0.128742 0.982683 -0.196527 1.040498
1 0.556914 0.745208 0.231645 0.803023
添加回答
舉報