Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3 pandas-在2个数据帧之间迭代记录并按列组计算最小距离_Python_Pandas_Loops_Distance - Fatal编程技术网

Python3 pandas-在2个数据帧之间迭代记录并按列组计算最小距离

Python3 pandas-在2个数据帧之间迭代记录并按列组计算最小距离,python,pandas,loops,distance,Python,Pandas,Loops,Distance,我有两个不同的熊猫数据集(python3),具有相同的结构(列:国家、地区、星期、COL1-COL180)。D1小到300行,D2超过200k行。 对于D1(小数据框)中的所有记录/行,我希望遍历D2数据框中的行,匹配国家/地区,并提取与D1中的记录最相似的记录。 通过计算col1-col180列中的值之间的距离来确定相似性。基本上距离=[sum(D1.COLi-D2.COLi)^2],其中i的范围为0到180。 应选择此距离最小的记录,并将其保存在单独的数据框中 我要建议的是一种相当幼稚的暴力

我有两个不同的熊猫数据集(python3),具有相同的结构(列:国家、地区、星期、COL1-COL180)。D1小到300行,D2超过200k行。 对于D1(小数据框)中的所有记录/行,我希望遍历D2数据框中的行,匹配国家/地区,并提取与D1中的记录最相似的记录。 通过计算col1-col180列中的值之间的距离来确定相似性。基本上距离=[sum(D1.COLi-D2.COLi)^2],其中i的范围为0到180。
应选择此距离最小的记录,并将其保存在单独的数据框中

我要建议的是一种相当幼稚的暴力方法,但应该是一个不错的开始。有很多方法可以优化它:

def calculate_distance(row_a, row_b):
    # Calculate the distance between two rows here.

d3_rows = []

for row in d1:
    maching_rows = d2.loc[(d2.country == row.country) & (d2.region == row.region)]
    closest_row = None
    closest_distance = float('inf')
    for row2 in matching_rows:
        distance = calculate_distance(row, row2)
        if distance < closest_distance:
            closest_row = row2
            closest_distance = distance
    d3_rows.append(closest_row)

d3 = pandas.concat(d3_rows)
def计算距离(a行,b行):
#在此计算两行之间的距离。
d3_行=[]
对于d1中的行:
加工行=d2.loc[(d2.country==行.country)和(d2.region==行.region)]
最近的行=无
最近距离=浮动('inf')
对于匹配_行中的行2:
距离=计算距离(第行,第2行)
如果距离<最近的距离:
最近的_行=第2行
最近距离=距离
d3_行。追加(最近的_行)
d3=pandas.concat(d3_行)
基本上,您可以从较大的数据帧中为较小帧中的每一行获取匹配行,然后计算每一行的距离。你不需要保持距离,所以只要保持距离最近的那一个就行了


我在这里所做的将非常缓慢,但您可以通过其他优化来加快它。(例如,D1中有多少行具有相同的国家和地区?

非常感谢您的回复!但是有些地方不太对劲……我一直收到一条错误消息“ValueError:没有要连接的对象”,而且肯定有行匹配。我认为匹配的陈述不太正确。知道怎么解决吗?非常感谢。