问题:我有一个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()