给出具有4个功能和1个索引列的DF:
df = pd.DataFrame(np.random.randint(0,100, size= (100,4)), columns=list('ABCD'))
df['index'] = range(1, len(df) + 1)
我想计算用户输入给定的曼哈顿距离。用户的输入将由a,b,c,d表示。该函数定义如下。
def Manhattan_d(a,b,c,d):
return (a - df['A']) + (b -df['B']) + (c - df['C']) + (d - df['D'])
当答案返回给我时,它以列表形式出现。现在,我想找到返回给我的最小值并将其链接到索引号。
如果我返回(min(formula)),则会得到一个数字的输出,而无法找到它的原始索引。如果更简单,则索引表示类别。因此,在应用公式后,我需要找到输出最少的类别。
希望如此。
答案 0 :(得分:1)
也许更好的方法是将曼哈顿距离应用于数据帧的每一行。此时,您可以使用<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306 /sehm5</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping class="com.application.retrain.dto.retrainDto"></mapping>
</session-factory>
</hibernate-configuration>
在原始数据框中找到与您馈入函数的a,b,c,d点最相似(曼哈顿距离最低)的点的索引。 / p>
.idxmin()
注意:曼哈顿距离需要差值的绝对值,我已将其包括在内。
另一个说明:将所有变量都传递到函数中通常是一个好习惯,这就是为什么我将def Manhattan_d(a,b,c,d, df):
return df.apply(lambda row:abs(row['A']-a)+abs(row['B']-b)+abs(row['C']-c)+abs(row['D']-d), axis=1).idxmin()
作为函数输入的原因。
另一种可能性是使用现有的实现,例如Scikit-learn的DistanceMetric类。