#python #python-3.x #pandas #sequencing
#python #python-3.x #pandas #последовательность
Вопрос:
У меня есть фрейм данных со следующей структурой:
prod_sec
A
AA
AAAAAAAAAAB
AAAABCCCAA
AACC
ABCCCBAC
df = pd.DataFrame({'prod_sec': ['A','AA','AAAAAAAAAAB','AAAABCCCAA','AACC','ABCCCBAC']})
Каждая строка представляет собой последовательность, состоящую из букв (от A до C в этом примере).
Я хотел бы создать список для каждой буквы, который подсчитывает вхождения в каждой позиции по всему столбцу pandas.
Например, в первой строке A находится только в первой позиции / индексе, а в других местах его нет.
Во второй строке буква A находится в первых двух позициях, а в других местах ее нет
В третьей строке буква A имеет все позиции до последней. И т.д…
Я хочу общее количество для столбца по позиции.
Вот пример для:
A -> [1,0,0,0,0,0,0,0,0,0,0]
AA [1,1,0,0,0,0,0,0,0,0,0]
AAAAAAAAAAB -> [1,1,1,1,1,1,1,1,1,1,0]
AAAABCCCAA [1,1,1,1,0,0,0,0,0,0,1]
AACC [1,1,0,0,0,0,0,0,0,0,0]
ABCCCBAC -> [1,0,0,0,0,0,1,0,0,0,0]
итак, для A я бы хотел, чтобы результат был похож на следующий… A [6,4,2,2,1,1,2,1,1,0]
В конце концов, я пытаюсь получить матрицу со строкой для каждого символа.
[6,4,2,2,1,1,2,1,1,1,0] [0,1,0,0,1,1,0,0,0,0,1] [0,0,1,1,0,1,2,0,0,0,0]
Комментарии:
1. Не могли бы вы уточнить, пожалуйста? Я не понял из вашего примера, чего вы пытаетесь достичь
2. каков ваш ожидаемый результат. непонятно, о чем вы спрашиваете?
Ответ №1:
Должно сработать следующее. Вы можете настроить результат в зависимости от ваших конкретных потребностей (массив numpy, фрейм данных, словарь и т.д.). Скажите мне, нужна ли вам дополнительная помощь в этом.
max_length=max([len(i) for i in df.prod_sec])
d={'A':[0]*max_length, 'B':[0]*max_length, 'C':[0]*max_length}
for i in df.prod_sec:
for k in range(len(i)):
d[i[k]][k] =1
result=pd.DataFrame.from_dict(d, orient='index')
Комментарии:
1. Вы подсчитываете символы для каждой ячейки. Я хотел бы иметь подсчет по позиции во всем столбце Pandas. Я прояснил свой вопрос выше.
2. Хорошо, я обновил свой ответ. Скажите мне, нужна ли вам дополнительная помощь с результатом.
3. Невероятно. Как бы это обобщить вместо жесткого кодирования A-C? Я могу получить все возможности с помощью
string = ''.join(set(df['prod_sec'].dropna().to_string(index = False))).strip()
, но я не уверен, как сгенерировать словарь.4. Вы можете сделать что-то вроде этого:
for i in df['prod_sec']: for k in i: d[k]=[0]*max_length