Python | Pandas | Использование нескольких лямбда-условий для вычисления строк со значениями и NAN - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь выполнить функцию python pandas, чтобы вычислить количество экземпляров по сравнению с "Имя клиента" и "Идентификатор клиента" и "Количество билетов".

Я заметил, что в В некоторых строках идентификатор пользователя отсутствовал, несмотря на наличие тикета и имени клиента. Я хочу иметь таблицу с суммой заявок (строк), которые были открыты по имени клиента и не имели идентификатора клиента.

Я ожидаю получить таблицу, подобную приведенной ниже:

enter image description here

Я использовал функцию lambada:

for  CustomertID in CustomerIDList:


CustomerID_Series=ExlReport.apply(lambda x:True if x['Account Name'] == CustomerID  else False, axis=1)
numOfRows = len(CustomerID_Series[CustomerID_Series == True].index)
countList.append(numOfRows)

Я получаю вывод ниже:

enter image description here

Итак, мой вопрос: как использовать лямбду, чтобы иметь несколько условий, основанных на имени клиента и идентификаторе клиента, и сумма количества строк / номеров билетов: 1) Имя клиента найдено, но идентификатор клиента отсутствует. 2) Найдены имя и идентификатор клиента.

Я думал об использовании для имени клиента l oop вместо списка идентификаторов клиентов, но я не совсем понимаю, как это сделать.

Спасибо

1 Ответ

0 голосов
/ 30 апреля 2020

Я не получил никакого ответа на этот вопрос, однако решил сам, без использования лямбады и без использования циклов. Добавив решение для справки:

Я заменил пустые ячейки в «идентификаторе клиента» на строковое значение «N / A» и использовал «group by» и «size ()» для получения количества билетов.

Решение, как показано ниже:

1 - Сортировка df для первой пустой ячейки / ячеек со значением NAN:

df = (df[['Customer Name','Customer ID']]).sort_values(by=["Customer Name","Customer ID"],axis = 0,ascending = [True,True],na_position='first')

2- Заменить пустую ячейку в столбце «Идентификатор клиента» на строку «N / A»:

df['Customer ID'] = df['Customer ID'].replace(np.nan, 'N/A')

3- Используйте group by для группировки df по двум столбцам, приоритет отдается «Имя клиента»

4- размер будет использоваться для количество строк

5- Для добавления имени столбца "Ticket Count" в df необходимо сбросить индекс:

df = ((df.***groupby***(["Customer Name","Customer ID"],as_index = False)).***size()***.***reset_index(name="Ticket Count"***))

6- Заменили 'N / A' на '':

df["Customer ID"] = df["Customer ID"].replace('N/A','')

7- Вывод, аналогичный приведенному ниже: Output

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