如何对“非数字”列进行 pandas 快速嵌套 for 循环? 因为这个 for 循环太慢了:
for i in range(len(df1[column_A]):
for j in range(len(df2[column_A]):
if df1[column_A][i] == df2[column_A][j]:
df1[column_B][i] = df2[column_B][j]
else:
pass
那么 pandas 本身或其他库还有其他方法可以做到这一点吗?
您提供的嵌套循环会导致 O(n^2) 复杂度,使得处理较大数据集时速度变慢。对 i 和 j 循环相同的范围,这是不必要的。 相反,您可以使用
pd.merge
import pandas as pd
# Merge file1 and file2 on column A
merged_df = pd.merge(file1, file2, on='column_A') # assuming it is a pandas dataframe
# Update file1_column_B with matched values from file2
file1_column_B = merged_df['column_B_y']
pd.merge()
函数基于公共列 (column_A) 合并两个 DataFrame(file1 和 file2)。另外,默认情况下,pd.merge()
执行内部合并,这意味着结果 DataFrame 中仅包含与 column_A 中的值匹配的行。
pd.merge
的时间复杂度在最佳情况下为O(n + m)(总结),其中n是左侧DataFrame(文件1)中的行数,m是右侧DataFrame(文件2)中的行数。 然而,在最坏的情况下(例如,当合并列中有许多重复值时),时间复杂度可能是 O(n × m)。
您还可以使用 numPy
argsort
+ searchsorted
import numpy as np
sorted_ = np.argsort(file2['column_A'])
match = np.searchsorted(file2['column_A'][sorted_], file1['column_A'])
values from file2
file1_column_B = file2['column_B'][sorted_[match]]
默认情况下,其时间复杂度为 O(n log n) [最佳情况]。