通过列表和数组列表的数据框循环计算
Calculation looping through dataframe of lists and list of arrays
我想使用数组列表计算欧氏距离。
import numpy as np
import pandas as pd
from scipy.spatial import distance
#Dataframe
data = [np.array([[1, 2], [1, 3], [1, 1]]),
np.array([[1, 2, 3], [3, 1, 2], [3, 2, 1]])]
names = ['A', 'B']
df = pd.DataFrame(dict((k,list(v)) for k,v in zip(names, data)))
df
#List of arrays
num = [np.array([-1, 2]), np.array([3, 2, -1])]
num
我想要做的是遍历并计算数据帧第一列中的每一行与列表中的第一个数组 num
中的每一行之间的欧几里得距离,第二列中的每一行与第二个数组等等。
到目前为止我已经尝试过:
columns=list(df)
for column in columns:
data = np.array(list(df[column]))
for row in data:
distance.euclidean(row, num)
给出错误:
ValueError: operands could not be broadcast together with shapes (2,) (3,)
我想要的输出是距离:
在我的真实数据集中,有超过 1000 列和数组列表,所以我想避免对任何列进行硬编码 name/index。
创建一个名为 result_df
的空 df。然后遍历列和数组。
计算该列的距离(results
)后,使用 result_df[column] = pd.Series(results)
:
将其分配给特定列
result_df = pd.DataFrame(columns=df.columns)
for idx, column in enumerate(df):
results = []
for arr in df[column].values:
results.append(distance.euclidean(arr,num[idx]))
result_df[column] = pd.Series(results)
# Print Distances
result_df
输出为:
我想使用数组列表计算欧氏距离。
import numpy as np
import pandas as pd
from scipy.spatial import distance
#Dataframe
data = [np.array([[1, 2], [1, 3], [1, 1]]),
np.array([[1, 2, 3], [3, 1, 2], [3, 2, 1]])]
names = ['A', 'B']
df = pd.DataFrame(dict((k,list(v)) for k,v in zip(names, data)))
df
#List of arrays
num = [np.array([-1, 2]), np.array([3, 2, -1])]
num
我想要做的是遍历并计算数据帧第一列中的每一行与列表中的第一个数组 num
中的每一行之间的欧几里得距离,第二列中的每一行与第二个数组等等。
到目前为止我已经尝试过:
columns=list(df)
for column in columns:
data = np.array(list(df[column]))
for row in data:
distance.euclidean(row, num)
给出错误:
ValueError: operands could not be broadcast together with shapes (2,) (3,)
我想要的输出是距离:
在我的真实数据集中,有超过 1000 列和数组列表,所以我想避免对任何列进行硬编码 name/index。
创建一个名为 result_df
的空 df。然后遍历列和数组。
计算该列的距离(results
)后,使用 result_df[column] = pd.Series(results)
:
result_df = pd.DataFrame(columns=df.columns)
for idx, column in enumerate(df):
results = []
for arr in df[column].values:
results.append(distance.euclidean(arr,num[idx]))
result_df[column] = pd.Series(results)
# Print Distances
result_df
输出为: