Как подсчитать символы в строках в столбце pandas

#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