Создайте новый столбец в кадре данных со значениями 'bin go' или 'nop' в зависимости от того, содержит ли строка все палиндромы или нет - PullRequest
0 голосов
/ 21 февраля 2020

(Извините, мне пришлось снять мой предыдущий пост, чтобы что-то исправить.)

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

Мне дали следующий код:

import pandas as pd

input_df = pd.DataFrame(
    [
        'Noon,Feature,Good'.split(','),
        'Radar,Refer,Wow'.split(','),
        'Other,Day,Mouse'.split(',')
    ],
    columns='String_1,String_2,String_3'.split(',')
)

output_df = pd.DataFrame(
    [
        [1,0,0,'nop'],
        [1,1,1,'bingo'],
        [0,0,0,'nop']
    ],
    columns='String_1,String_2,String_3,Bingo'.split(',')
)

Итак, учитывая, что input_df, напишите функция с именем bin go, которая выдаст данный output_df.

Вот что я придумала:

def is_palindrome(s):
    s = s.lower()

    new_s = ""

    for char in s:
        if char.isalnum():
            new_s += char

    if new_s == new_s[::-1]:
        return 1
    else:
        return 0


def bingo(df):
    df = df.applymap(is_palindrome)

    num_col = len(df.columns)

    sums = df.apply(sum, axis=1)

    values = []
    for item in sums:
        if item == num_col:
            values.append('bingo')
        else:
            values.append('nop')

    df['Bingo'] = values

    return df

output_df.equals (bin go (input_df)) возвращает True поэтому я считаю, что я решил проблему в этом случае. Спасибо за любой совет, хотел бы видеть, как другие люди решают это более эффективно.

1 Ответ

2 голосов
/ 21 февраля 2020

Вы можете использовать applymap, чтобы сравнить каждую ячейку с обратным словом, и использовать np.where, чтобы определить, является ли она ячейкой go или nop.

output_df = (
    input_df.applymap(lambda x: int(x[::-1].lower()==x.lower()))
    .assign(Bingo=lambda x: np.where(x.all(1), 'bingo', 'nop'))
)

    String_1    String_2    String_3    Bingo
0   1           0           0           nop
1   1           1           1           bingo
2   0           0           0           nop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...