我有两个数据帧,让我们称第一个数据帧为df,第二个数据帧为compare-fu: 第一个是这样的:
Date cell tumor_size (assume it is three dimensional)
25/10/2015 113 [51, 52, 55]
22/10/2015 222 [50, 68, 22]
22/10/2015 883 [45, 23, 67]
20/10/2015 334 [35, 23, 76]
第二个是这样的:
^{pr2}$对于数据帧中的每一行,我要遍历第二个数据帧中的每一行,记录欧几里德距离,然后得到最小值。这是我的代码试图实现这一点:
# These will be our lists of pairs and size differences.
pairs = []
diffs = []
for row in df.itertuples():
compare_df['distance'] = np.linalg.norm(compare_df.tumor_size - row.tumor_size) # I get error for this line
row_of_interest = compare_df.loc[compare_df.distance == compare_df.distance.min()]
pairs.append(row_of_interest.cell.values[0])
diffs.append(row_of_interest.distance.values[0])
df['most_similar_to'] = pairs
df['similarity'] = diffs
但是我得到:
ValueError: Length of values does not match length of index
虽然向量的大小是相同的,但是我删除了Nan
值。有什么想法吗?在
你的错误是试图从三号(}大小不同时,它不知道如何匹配,并引发异常。在
row.tumor_size
)的pd.Series
中减去大尺寸(compare_df.tumor_size
)。当从pd.Series
中减去list
/tuple
时,pandas
尝试匹配两个序列并减去每两个匹配的行。但是,当list
和{从错误代码判断,您的
pandas
版本可能有点旧。您可以尝试使用apply
强制逐行使用减法运算符:当然,提前将所有列表转换为
np.array
可能会有好处。在如果您不喜欢
^{pr2}$np.array
,可以使用:在
^{3}$pandas 0.21.0
中(也许更早一点),您会得到一个不同的错误消息:在这种情况下,有一个更简单的解决方案-只需将列表转换为
np.array
,它将像魔术一样工作对我来说,这是与
pandas==0.21.0
和numpy==1.13.3
一起工作的。在相关问题 更多 >
编程相关推荐