Панды: как я могу использовать карту столбца в кадре данных панд для создания нового столбца?Возникли проблемы с использованием лямбда-функции, чтобы сделать это - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть набор данных, содержащий строки в 1 столбце, в котором я хочу сосчитать наиболее распространенный символ и поместить этот символ в новый столбец.Я также хочу другой столбец, который содержит пропорцию строки, которую представляет символ.

Метод, который я хочу использовать для каждой строки, выглядит следующим образом:

sequence = 'ACCCCTGGC'
char_i_want = collections.Counter(sequence).most_common(1)[0] # for the character
value_i_want = collections.Counter(sequence).most_common(1)[1] / len(sequence) # for the proportion

Я понимаю результат most_commonявляется кортежем, но когда я пытаюсь сделать это в оболочке Python, мне нужно сделать collections.Counter(sequence).most_common(1)[0][0], чтобы получить доступ к 0-му элементу кортежа, кортеж является 0-м элементом возвращаемого списка.Когда я попытался реализовать это, оно все еще не работало.

Вот как я пытался это сделать:

def common_char(sequence):
    return Counter(sequence).most_common(1)[0][0]

def char_freq(sequence):
    return Counter(sequence).most_common(1)[0][1] / len(sequence)

data = pd.read_csv('final_file_noidx.csv')
data['most_common_ref'] = data['REF'].map(lambda x: common_char(x))
data['most_common_ref_frac'] = data['REF'].map(lambda x: char_freq(x))

Меня приветствует это сообщение об ошибке: TypeError: 'float' object is not iterable

1 Ответ

1 голос
/ 25 сентября 2019
data['most_common_ref'] = data['REF'].map(lambda x: common_char(x), na_action='ignore')
data['most_common_ref_frac'] = data['REF'].map(lambda x: char_freq(x), na_action='ignore')

Необходимо игнорировать NaNs, спасибо Энди Л.

...