Конкатенация значений двух серий pandas (не относящихся к типу str) слишком медленная (линейная сложность) - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть pandas.DataFrame с двумя (или более) сериями, которые не относятся к типу str (например, тип float). Я хочу получить вывод ser ie типа 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 . Я пытался go numpy, но я не видел никакого увеличения производительности, вероятно, потому, что это то, что pandas уже делает под капотом.

time complexity of the operation

У кого-нибудь есть решение, которое ускорило бы эту операцию?

Большое спасибо

1 Ответ

1 голос
/ 26 апреля 2020

Вы не можете избежать линейной производительности - ваша единственная надежда - показать больше того, что вы планируете делать с результатом, чтобы попытаться избежать дополнительной работы. То, что вы написали, вполне разумно, вы можете попробовать следующее и посмотреть, имеет ли оно лучшую производительность (но я не удивлюсь, если это не так).

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