【发布时间】:2019-03-13 18:13:45
【问题描述】:
这就是我想要做的——我能够完成第 1 到第 4 步。在第 5 步之前需要帮助
基本上对于每个数据点,我想根据列 y 找到所有平均向量的欧几里得距离
- 获取数据
- 分离出非数字列
- 按 y 列查找平均向量
- 保存手段
- 根据 y 值从每一行中减去每个平均向量
- 每列平方
- 添加所有列
- 连接回数值数据集,然后连接非数值列
import pandas as pd
data = [['Alex',10,5,0],['Bob',12,4,1],['Clarke',13,6,0],['brke',15,1,0]]
df = pd.DataFrame(data,columns=['Name','Age','weight','class'],dtype=float)
print (df)
df_numeric=df.select_dtypes(include='number')#, exclude=None)[source]
df_non_numeric=df.select_dtypes(exclude='number')
means=df_numeric.groupby('class').mean()
对于means 的每一行,从df_numeric 的每一行中减去该行。然后取输出中每一列的平方,然后为每一行添加所有列。然后将此数据连接回df_numeric 和df_non_numeric
-------------更新1
添加代码如下。我的问题已经改变,更新的问题在最后。
def calculate_distance(row):
return (np.sum(np.square(row-means.head(1)),1))
def calculate_distance2(row):
return (np.sum(np.square(row-means.tail(1)),1))
df_numeric2=df_numeric.drop("class",1)
#np.sum(np.square(df_numeric2.head(1)-means.head(1)),1)
df_numeric2['distance0']= df_numeric.apply(calculate_distance, axis=1)
df_numeric2['distance1']= df_numeric.apply(calculate_distance2, axis=1)
print(df_numeric2)
final = pd.concat([df_non_numeric, df_numeric2], axis=1)
final["class"]=df["class"]
谁能确认这是实现结果的正确方法?我主要关心的是最后两个陈述。倒数第二个语句会正确连接吗?最后的语句会分配原始的class吗?我想确认 python 不会以随机顺序进行 concat 和类分配,并且 python 会保持行出现的顺序
final = pd.concat([df_non_numeric, df_numeric2], axis=1)
final["class"]=df["class"]
【问题讨论】:
-
你试过
df.set_index('Name', inplace=True)然后np.sqrt(np.abs(df.pow(2) - df.mean().pow(2)))当然是import numpy as np开头吗? -
能否提供完整的代码?
标签: python pandas euclidean-distance