векторизация итерации кортежа - PullRequest
0 голосов
/ 27 марта 2019

У меня есть код pandas, который выполняет итерацию кортежей, я пытаюсь его векторизовать.

список кортежей, которые я выполняю, если такого рода:

[('Morden', 35672, 'Morden Hall Park, Surrey'),
 ('Morden', 73995, 'Morden Hall Park, Surrey'),
 ('Newbridge', 120968, 'Newbridge, Midlothian'),
 ('Stroud', 127611, 'Stroud, Gloucestershire')]

рабочие кортежикод повторения:

for tuple_ in result_tuples:
    listing_looking_ins1.loc[:,'looking_in']\ 
    [(listing_looking_ins1.listing_id ==tuple_[1]) &
     (listing_looking_ins1.looking_in ==tuple_[0])] = tuple_[2]

Я пытался написать функцию для использования с методом apply, но она не работает:

result_tuples_df = pd.DataFrame(result_tuples)

def replace_ (row):
    row.loc[:,'looking_in'][(listing_looking_ins1.listing_id\ 
    \==result_tuples_df[1]) &
    (listing_looking_ins1.looking_in\==result_tuples_df[0])] \
     = result_tuples_df[2]

listing_looking_ins1.apply(replace_, axis=1)

Спасибо!

1 Ответ

1 голос
/ 27 марта 2019

Вы можете преобразовать свой список кортежей в DataFrame и объединить его с оригиналом:

result_tuples_df = pd.DataFrame(result_tuples,
                                columns=['listing_id', 'looking_in', 'result'])

df = listing_looking_ins1.merge(result_tuples_df)

print(df)

Вывод:

  listing_id  looking_in                    result
0     Morden       35672  Morden Hall Park, Surrey
1     Morden       73995  Morden Hall Park, Surrey
2  Newbridge      120968     Newbridge, Midlothian
3     Stroud      127611   Stroud, Gloucestershire

И затем, если вы хотите получить результат вlooking_in столбец:

df.drop('looking_in', 1).rename(columns={'result': 'looking_in'})

Выход:

  listing_id                looking_in
0     Morden  Morden Hall Park, Surrey
1     Morden  Morden Hall Park, Surrey
2  Newbridge     Newbridge, Midlothian
3     Stroud   Stroud, Gloucestershire

PS В вашем коде вы устанавливаете значения с помощью:

listing_looking_ins1.loc[:,'looking_in'][...] = ...

Это настройки значений накопия DataFrame.Пожалуйста, обратитесь к Как обращаться с SettingWithCopyWarning в Pandas? о том, почему и как вам следует избегать этого

PPS Поскольку вы спрашивали о векторизации и использовании apply, вы также можете посмотретьпри этом ответе https://stackoverflow.com/a/24871316/6792743 на выполнение различных операций

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