首页 > 解决方案 > 连接两个熊猫系列(不是 str 类型)的值太慢(线性复杂度)

问题描述

我有pandas.DataFrame两个(或更多)不是类型的系列str(例如 float 类型)。我想要的输出是一系列类型str,它是我的系列(float 类型)与给定分隔符(例如“-”)串联的结果。

以下函数build_df_ex构建示例数据框:

def build_df_ex(n):
    df_ex = pd.DataFrame({"s1": -abs(np.random.rand(int(n))),
                          "s2": +abs(np.random.rand(int(n)))})
    return df_ex

该函数convert_to_str_and_add进行所需的连接:

def convert_to_str_and_add(df, sep="-"):
    df = df.astype(str)
    s = df.s1 + sep + df.s2
    return s

我的主要问题是这个函数具有线性复杂性(见下图),这在我的情况下是禁止的。该函数的主要瓶颈是str类型的转换。我曾尝试采用 numpy 的方式,但我没有看到任何性能提升,可能是因为 pandas 已经在做这件事了。

操作的时间复杂度

任何人都有可以使此操作更快的解决方案吗?

非常感谢

标签: pythonpandasperformancetime-complexity

解决方案


您无法逃避线性性能 - 您唯一的希望是展示更多您计划对结果执行的操作,以避免额外的工作。你写的完全合理,你可以试试下面的,看看它是否有更好的性能(但如果没有,我不会感到惊讶)。

df.apply(('{0[0]}' + sep + '{0[1]}').format, axis=1)

推荐阅读