Pandas dataframe: подсчитать вхождение элемента списка в строках dataframe - PullRequest
0 голосов
/ 07 июня 2018

Используя python, я хотел бы подсчитать вхождение элементов списков для каждой строки в кадре данных и агрегировать вхождение каждого элемента.

Вот кадр данных, с которым я работаю:

#Cluster_number_1   Cluster Type:   terpene
#Cluster_number_2   Cluster Type:   nrps
#Cluster_number_3   Cluster Type:   terpene
#Cluster_number_4   Cluster Type:   nrps
#Cluster_number_5   Cluster Type:   nrps
#Cluster_number_6   Cluster Type:   nrps
#Cluster_number_7   Cluster Type:   t1pks
#Cluster_number_8   Cluster Type:   other
#Cluster_number_9   Cluster Type:   t1pks
#Cluster_number_10  Cluster Type:   nrps

Соответствующий список:

cluster_type = ["t1pks", "nrps", "terpene", "other"]

Желаемый результат:

BGC_Class    Count
t1pks            2
nrps             5
terpene          2
other            1

Чтобы помочь объяснить, заимствуя из переменных Unix $:

file = "cluster_counts.txt"
cluster_count = open(file, "w")

cluster_count.write(+$1+"\t"+$2"\n")

Где $ 1является первым элементом в списке, а $ 2 - это число раз, которое оно встречается во всех строках.

Кадры данных не должны превышать 100 строк, поэтому эффективность не имеет значения.

Best, BD

Я нашел кое-что, чтобы начать меня здесь Как подсчитать вхождения элемента списка? .

>>> l = ["a","b","b"]
>>> [[x,l.count(x)] for x in set(l)]
[['a', 1], ['b', 2]]

Однако при этом учитывается только наличие элементов в списке, содержащем его.

Я не знаю, как подсчитать вхождение элементов моих списков в фрейм данных.

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Создание соответствующего заголовка над соответствующим столбцом проделало трюк:

import pandas as pd

df = pd.read_csv('test2_output copy.tsv', sep='\t', names=['Cluster Number', '#', 'Cluster_Type'])
df.Cluster_Type.value_counts()

Вывод:

t1pks       7 
nrps        7
other       3
terpene     2
t1pks-nrps  1
indole      1

Спасибо, 'The Unfun Cat'

0 голосов
/ 07 июня 2018

Попробуйте

df.BGC_Class.value_counts()

Если это не работает, пожалуйста, оставьте свои данные:)

...