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

2024-09-28 01:26:10 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: 数据距离记录结构countryregionpython3col1
1条回答
网友
1楼 · 发布于 2024-09-28 01:26:10

我要建议的是一个相当天真的暴力方法,但应该是一个体面的开始。有很多方法可以优化它:

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)

基本上,您可以从较大的数据帧中为较小帧中的每一行获取匹配的行,然后计算每一行的距离。你不需要保持距离,所以你只需要保持最接近的距离

我在这里所做的将是相当缓慢的,但你可以加快它与其他优化(例如,D1中有多少行具有相同的国家和地区?)

相关问题 更多 >

    热门问题