Pandas-仅合并一部分数据框本身

问题描述 投票:0回答:1

这是以下问题的跟进问题:Pandas Similarity Matching

第一个问题的最终目标是找到一种方法,以使相似的每一行都具有相同的CountryId

这里是示例数据框:

 df = pd.DataFrame([[1, 5, 'AADDEEEEIILMNORRTU'], [2, 5, 'AACEEEEGMMNNTT'], [3, 5, 'AAACCCCEFHIILMNNOPRRRSSTTUUY'], [4, 5, 'DEEEGINOOPRRSTY'], [5, 5, 'AACCDEEHHIIKMNNNNTTW'], [6, 5, 'ACEEHHIKMMNSSTUV'], [7, 5, 'ACELMNOOPPRRTU'], [8, 5, 'BIT'], [9, 5, 'APR'], [10, 5, 'CDEEEGHILLLNOOST'], [11, 5, 'ACCMNO'], [12, 5, 'AIK'], [13, 5, 'CCHHLLOORSSSTTUZ'], [14, 5, 'ANNOSXY'], [15, 5, 'AABBCEEEEHIILMNNOPRRRSSTUUVY']],columns=['PartnerId','CountryId','Name'])

其他线程的答案对这个问题很有帮助,但是我最终遇到了计算问题。我的真实来源包含> 19.000行,并且将来还会更大。

答案是建议将每个自我的数据框merge与具有相同CountryId的其他所有行进行比较:

df = df.merge(df, on='CountryId', how='outer')  

即使对于上面提供的15行的小示例,我们最终也会合并225行。对于整个数据集,我最终获得131.044.638行,这使我的RAM不能正常工作。因此,我需要考虑一种更好的方法来merge两个数据帧。

[在进行相似性检查时,我想知道是否有可能:

  1. 基于CountryIdName对数据帧进行排序

  2. 仅合并每行与+/- 3行连接。例如。排序后,第1行将仅与(2,3&4)合并,因为这是第一个行。,第2行将仅与(1、3、4、5)合并,依此类推。

  3. 像这样,我几乎彼此有相似的名字,而“更远”的名字也不会相似。因此,不需要检查它们的相似性。

这是以下问题的后续问题:熊猫相似性匹配第一个问题的最终目标是找到一种使每一行与另一行具有相似性的方法,如果它们具有...

python pandas dataframe merge
1个回答
0
投票
我发现了我的问题的解决方法,该方法是在(如果存在的话)之前和之后进行3行操作。
© www.soinside.com 2019 - 2024. All rights reserved.