python - Pandas - 仅将一个数据框与其自身部分合并
问题描述
这是以下问题的后续问题: 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
处理这两个数据框。
当我进行相似性检查时,我想知道是否有可能:
CountryId
根据和 对数据框进行排序Name
仅将每行与 +/- 3 行连接合并。例如,排序后第 1 行将仅与 (2,3 & 4) 合并,因为这是第一行。第 2 行将仅与 (1, 3, 4, 5) 合并,依此类推。
像这样,我将有几乎彼此相邻的相似名称,并且“更远”的名称无论如何都不会相似。因此不需要检查它们的相似性。
解决方案
我为我的问题找到了一种解决方法,即在之前(如果存在)和之后取 3 行。
sorted_df = df.sort_values(by=['CountryId','Name']).reset_index(drop=True)
new_sorted = pd.Series()
min = -3
max = 3
for s in list(range(min,max+1,1)):
if s == min:
new_sorted = sorted_df['PartnerId'].astype(str).shift(s,fill_value='A').rename('MatchingID')
elif s != 0:
new_sorted = new_sorted + '-' + sorted_df['PartnerId'].astype(str).shift(s,fill_value='A').rename('MatchingID')
match = sorted_df.merge(new_sorted,left_index=True,right_index=True)
matching_df = []
for index, row in match.iterrows():
row_values = row.tolist()
matching_df += [row_values[0:-1] + [int(w)] for w in row_values[-1].split('-') if w != 'A']
如果有人能想出一个更好的主意,我会很高兴听到它!
推荐阅读
- ios - 无法按下 NavigationBar 下方的 UIButton?
- kubernetes - 如何通过 Ansible 在 Pod 上使用 k8s 模块执行 shell 命令
- python - Python:发送电子邮件,包括抄送
- c# - 错误:IEntityChangeTracker 的多个实例无法引用实体对象
- json - 我在使用 Youtube API for Subscribers (Python) 时遇到 JSON 解码错误
- visual-studio - Visual Studio Mac:如何更改每个缩进设置的空格?
- r - 识别数据集中的预留扩展(ddply?)
- swift - Swift UI 教程错误“包含控制流语句的闭包不能与函数构建器'ViewBuilder'一起使用”
- python - 使用列表查询 MongoDB
- html - React img 被危险地设置为内部 html?