объединить одну и ту же строку со всеми элементами массива или серии - PullRequest
1 голос
/ 17 мая 2019

У меня есть np.array целых чисел и один str, и я хочу pd.Series типа str с единственным str, добавленным к каждому элементу np.array. Есть ли способ сделать это без создания большого списка, состоящего из str, повторенных подходящим числом раз? Что-то похожее на бесшумное вещание было бы идеально.

Я пробовал pandas.Series.str.cat и np.core.defchararray.add, но оба они только поэлементно складывают равную длину Series / array.

Ниже приведен пример нужной мне функциональности:

# This is not code that will actually run!
nums = np.array([1, 2, 3, 4, 5])
name = "name "

result = concat_one_to_many(name, nums)

В конце концов я должен получить pd.Series со следующими значениями

"name 1"
"name 2"
"name 3"
"name 4"
"name 5"

Это должно быть как можно быстрее. Это причина, по которой я избегаю циклов или понимания списков Python. Если этого избежать невозможно, каков будет самый быстрый способ их реализации?

Ответы [ 3 ]

1 голос
/ 17 мая 2019

Если вам нужен pd.Series, вы можете просто добавить строку в серию панд, и она добавит ее к каждому элементу:

numsAsSeries = pd.Series(nums)
wantedResult = name + numsAsSeries.astype(str)
1 голос
/ 17 мая 2019

np.char.replace - это то, что вам нужно, но вы должны указать массив строк, а не числовой тип:

>>> np.char.replace(np.array(nums, dtype=np.str), '', 'name ', 1)
array(['name 1', 'name 2', 'name 3', 'name 4', 'name 5'], dtype='<U6')
1 голос
/ 17 мая 2019

Вы потенциально можете использовать функцию map.

new_l = pd.Series(map(lambda x: name+str(x), nums))

Функция map будет перебирать массив nums и применять определенную функцию к каждому элементу. Здесь лямбда-функция будет применять операцию name + str(x), где x является элементом массива nums. Обертывание всей функции с помощью pd.Series вернет серию панд с индексами по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...