性能改进:查找以特定字符串结尾的唯一行数(对于数据帧中的每一行)



问题:我有一个pandas数据帧(下面代码中的"df"(,大约有1M行。其中一列包含看似随机的字符串。

列_A
1 f24g5.eegajk.cae
2 gwee.wdegsugew
3 43fsf5
4 gefae43fsf5
10234 w4.t4w.43fsf5
150968 gefae43fsf5

假设您的数据集是:

df = pd.DataFrame({"column_A": ["f24g5.eegajk.cae", "43fsf5", "gefae.43fsf5",
"w4.t4w.43fsf5", "gefae.43fsf5"]})

搜索到的字符串是43fsf5:

s = ".43fsf5"
df[f"endswith_{s}"] = df.column_A.str.endswith(s)
df.loc[(df[f"endswith_{s}"])]["column_A"].unique() # unique values with condition True
df.loc[(df[f"endswith_{s}"])]["column_A"].nunique() # number of unique values with condition True

测试

生成带有10.100.000行和100.000的随机df,以.43fsf5结束(字符串的平均长度为20(:

def random_string(
length : int 
) -> str:
base = string.punctuation + string.ascii_uppercase + string.ascii_lowercase + string.digits
return ''.join(random.choices(base, k=length))
df = pd.DataFrame(
{"column_A": 
[random_string(19) + ".43fsf5" for _ in range(10**5)] + 
[random_string(19) for _ in range(10**7)]})

使用timeit(每次循环2.69 s±27.4 ms(7次运行的平均值±标准偏差,每次循环1次(

%%timeit
df[f"endswith_{s}"] = df.column_A.str.endswith(s)
df.loc[(df[f"endswith_{s}"])]["column_A"].nunique()

相关内容

  • 没有找到相关文章

最新更新