【发布时间】:2020-06-04 08:09:18
【问题描述】:
我有一个如下的数据框。我知道df.groupby("degree").mean() 会给我提供degree 的意思。我想采用这些方法并找到每个数据点与这些平均值之间的距离。在这种情况下。对于每个数据点,我想从平均值(df.groupby("degree").mean() 的输出)(4,40)(2,80)和(4,94)获得 3 个距离,并创建 3 个新列。距离应该用公式计算,BCA_mean=(name-4)^3+(score-40)^3,M.Tech_mean=(name-2)^3+(score-80)^3,MBA_mean=(name-4)^3+(score-94)^3
import pandas as pd
# dictionary of lists
dict = {'name':[5, 4, 2, 3],
'degree': ["MBA", "BCA", "M.Tech", "MBA"],
'score':[90, 40, 80, 98]}
# creating a dataframe from a dictionary
df = pd.DataFrame(dict)
print (df)
name degree score
0 5 MBA 90
1 4 BCA 40
2 2 M.Tech 80
3 3 MBA 98
df.groupby("degree").mean()
degree name score
BCA 4 40
M.Tech 2 80
MBA 4 94
更新1
我的真实数据集有 100 多列。我更喜欢可以满足这种需要的东西。逻辑还是一样的,对于每个平均值,从一列中减去平均值,然后取每个单元格的立方体并相加
我发现了类似下面的内容。但不确定是否有其他有效的方法
y=df.groupby("degree").mean()
print (y)
import numpy as np
(np.square(df[['name','score']].subtract(y.iloc[0,:],axis=1))).sum(axis=1)
df["mean0"]=(np.square(df[['name','score']].subtract(y.iloc[0,:],axis=1))).sum(axis=1)
df
【问题讨论】: