Как я могу подсчитать появление строки в кадре данных в Python? - PullRequest
1 голос
/ 18 июня 2020

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

Например, это работает с отдельным элементом в моем фрейме данных

df = pd.DataFrame({'Route':['Callais','Dover','Portsmouth'],'shipCode':[['77H','77G'],['77G'],['77H','77H']]})
df['shipCode'][2].count('77H')

Но когда я пытаюсь выполнить действие для каждой строки с использованием

df['shipCode'].count('77H')
df['shipCode'].str.count('77H')

Это не удается с обеими попытками, любая помощь в том, как это кодировать, будет очень признательна

Спасибо

Ответы [ 2 ]

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

Фрейм данных имеет столбец кода доставки со списком значений.

Сначала покажите значение True или False, чтобы определить строки, содержащие строку '77H' в столбце кода доставки.

> df['shipcode'].map(lambda val: val.count('77H')>0)

Теперь отфильтруйте фрейм данных на основе тех значений True / False, полученных на предыдущем шаге.

> df[df['shipcode'].map(lambda val: val.count('77H')>0)]

Наконец, получите счетчик для всех значений в фрейме данных, где Список shipcode содержит значение, соответствующее '77H' с использованием метода python len.

> len(df[df['shipcode'].map(lambda val: val.count('77H')>0)])

Другой способ, который позволяет легко запомнить, что было проанализировано, - это создать столбец в том же кадре данных для сохранить значение True / False. Затем выполните фильтрацию по значениям True / False. Это действительно то же самое, что и выше, но, на мой взгляд, немного красивее.

> df['filter_column'] = df['shipcode'].map(lambda val: val.count('77H')>0)
> len(df[df['filter_column']])

Удачи и наслаждайтесь работой с Python и Pandas для обработки ваших данных!

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

что, если бы вы сделали что-то подобное ??

если исходный словарь ...

import pandas as pd
from collections import Counter
df = pd.DataFrame(df) #where df is the dictionary defined in OP

вы можете сгенерировать Counter для всех элементов в списках в каждая строка выглядит так:

df['counts'] = df['shipCode'].apply(lambda x: Counter(x))

вывод:

        Route    shipCode                counts
0     Callais  [77H, 77G]  {'77H': 1, '77G': 1}
1       Dover       [77G]            {'77G': 1}
2  Portsmouth  [77H, 77H]            {'77H': 2}

или, если вы хотите, в частности, например, '77H', вы можете сделать что-то вроде этого:

 df['counts'] = df['shipCode'].apply(lambda x: Counter(x)['77H'])

вывод:

        Route    shipCode  counts
0     Callais  [77H, 77G]       1
1       Dover       [77G]       0
2  Portsmouth  [77H, 77H]       2

или даже с использованием первого метода (полный счетчик в каждой строке):

[count['77H'] for count in df['counts']]

вывод:

[1, 0, 2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...