Python: Как вывести результаты функции в фрейм данных - PullRequest
0 голосов
/ 16 июня 2020

У меня есть dataFrame с ароматическими пептидами и их аминокислотной последовательностью, и я пытаюсь подсчитать появление каждой аминокислоты и сохранить его в новом dataFrame . Для начала я просто работаю с очень маленьким фреймом данных всего с 5 строками. Для моего фактического dataFrame последовательности могут быть длиннее 1 символа, и если, например, строка: 'RPFFLR', я бы хотел, чтобы она подсчитывала: 2 * F, 1 * L, 1 * P и 2 * R.

Это исходный dataFrame:

    ID               Name Sequence
0      1  bitter amino acid        R
3      4  bitter amino acid        P
6      7  bitter amino acid        F
36   172  bitter amino acid        L
438  105  bitter amino acid        V

У меня есть следующий код:

def countAA(Bseq, ref):
    countF = [0]
    countL = [0]
    countP = [0]
    countR = [0]
    countV = [0]
    Bseq = Baadata.Sequence
    ref = 'ADEFGHIKLMPQRSTVWY'
    for i in Bseq:
        for c in ref:
            if ref[4] in Bseq:
                countF += 1
            elif ref[9] in Bseq:
                countL += 1
            elif ref[11] in Bseq:
                countP += 1
            elif ref[13] in Bseq:
                countR += 1
            elif ref[16] in Bseq:
                countV += 1
    return [countF, countL, countP, countR, countV]

Bseq = Baadata.Sequence
for i in Bseq:
    ref = 'ADEFGHIKLMPQRSTVWY'
    Baa = countAA(Bseq, ref)

Bdf = pd.DataFrame((Baa),
                   index=['F', 'L', 'P', 'R', 'V'],
                   columns=['Bitter']
                   )
print(Bdf)

Для этого небольшого ввода ожидаемый результат будет:

     Bitter
F    1
L    1
P    1
R    1
V    1

Что я делаю неправильно, так как мой код не считает символы?

Ответы [ 2 ]

0 голосов
/ 16 июня 2020

Возможно, это сработает:

1) сначала сгруппируйте свои данные на основе «Имя» и «Последовательность» (я предполагаю, что у вас всего несколько последовательностей)
df = df.groupby(['Name', 'Sequence']).count().reset_index()

2) Затем поверните таблицу, чтобы получить результат вашего намерения
df.pivot(index='Sequence', columns='Name', values='ID')

0 голосов
/ 16 июня 2020

Вы уверены, что DataFrame - лучшая структура для вашего вывода? Если все, что вам нужно, это подсчет каждого символа в столбце Sequences, вы можете сделать это очень легко, используя Counter:

from collections import Counter
Bdf = Counter("".join(Baadata.Sequence))

пример

Baadata = pd.DataFrame(["asd", "fdf", "s", "xxxxxxx"], columns=['Sequence'])
Counter("".join(Baadata.Sequence))

выходы

Counter({'a': 1, 's': 2, 'd': 2, 'f': 2, 'x': 7})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...