Pandas для сравнения столбца с объектом списка с другим столбцом, содержащим int - PullRequest
0 голосов
/ 30 апреля 2020

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

Конструкция фрейма данных:

+------------+-----------------------+----------------------+-----------------+--------------------+------------+---------+
| Number     | Caller                | Assignment group     | Assigned to     | Status(state)      | Location   |   Aging |
|------------+-----------------------+----------------------+-----------------+--------------------+------------+---------|
| INC0722882 | Shivam Verma          | RD-DI-Infra-Linux    | Karn Kumar      | Active             | IN-NDA02   |       2 |
| INC0786494 | Kanhaiya Kumar Mishra | RD-Hotspot-Team-APAC | Karn Kumar      | Active             | IN-NDA02   |       5 |
| INC0790029 | Akhil Garg            | RD-DI-Infra-Storage  | Amit Raj        | Awaiting User Info | IN-NDA02   |       3 |
| INC0743690 | Japesh Kumar          | RD-DI-Infra-Linux    | Shakir Chaudhry | Awaiting User Info | IN-NDA02   |       5 |
+------------+-----------------------+----------------------+-----------------+--------------------+------------+---------+

Pandas код:

from __future__ import print_function
from signal import signal, SIGPIPE, SIG_DFL
signal(SIGPIPE,SIG_DFL)

from tabulate import tabulate
import pandas as pd
##### Python pandas, widen output display to see more columns. ####
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
pd.set_option('expand_frame_repr', True)
##########################################################################################
def pprint_df(dframe):
    print(tabulate(dframe, headers='keys', tablefmt='psql', showindex=False))

names = ['Amit Raj','Andre Geurts','Andrzej Kamionek','Ankur Wason','Ashish Kumar','Carl Thijssen','Chris Masson','Daniel Chorazy','Devarishi Kumar','Elizabeth Tamayo','Eric Oomen','Gopinath Perumal','Jakub Kubera','Jeffrey Thompson','Jeroen Kwanten','Karn Kumar','Kenny Henderson','Manish Kumar','Mihai Pârlea','Mihai Reus','Naveen Kumar','Rafiq Khan','Rob Goossens','Robert in','Roger Smith','Santhoshkumar Krishnamoorthy','Shakir Chaudhry','Sonu Kumar','Suraj Budha','Szymon Kolodziejski','Szymon Kubera','Tony Olsson','Vetrivelan Rajagopalan','Yogesh Miglani','Abrar Ahmad']

col_name = ['Number','Caller','Assignment group','Assigned to','Status(state)','Location','Aging']

df = pd.read_excel('Backlog-April_24.xlsx', usecols=col_name, encoding='utf-8', index=False)
# df  = df[df['Assigned to'].isin(names)]  <-- This works perfectly with above dataframe

df  = df[df['Assigned to'].isin(names) & df['Aging'] >= 5]
print(df.dtypes)
pprint_df(df)

Когда я запускаю приведенный выше код, я не получаю результаты, даже если я преобразовал int в str.

$ ./pd_code.py
Number              object
Caller              object
Assignment group    object
Assigned to         object
Status(state)       object
Location            object
Aging               object
dtype: object
+----------+----------+--------------------+---------------+-----------------+------------+---------+
| Number   | Caller   | Assignment group   | Assigned to   | Status(state)   | Location   | Aging   |
|----------+----------+--------------------+---------------+-----------------+------------+---------|
+----------+----------+--------------------+---------------+-----------------+------------+---------+

Желаемый вывод:

Пример:

+------------+-----------------------+----------------------+-----------------+--------------------+------------+---------+
| Number     | Caller                | Assignment group     | Assigned to     | Status(state)      | Location   |   Aging |
|------------+-----------------------+----------------------+-----------------+--------------------+------------+---------|

| INC0786494 | Kanhaiya Kumar Mishra | RD-Hotspot-Team-APAC | Karn Kumar      | Active             | IN-NDA02   |       5 |

| INC0743690 | Japesh Kumar          | RD-DI-Infra-Linux    | Shakir Chaudhry | Awaiting User Info | IN-NDA02   |       5 |
+------------+-----------------------+----------------------+-----------------+--------------------+------------+---------+

1 Ответ

0 голосов
/ 01 мая 2020

Просто ради потомков нам нужно использовать логическое индексирование ...

Логическое индексирование:

Еще одной распространенной операцией является использование логических векторов для фильтрации данных. Операторы: | для или, & для и и ~ для нет. Они должны быть сгруппированы с помощью круглых скобок.

df  = df[df['Assigned to'].isin(names) & (df['Aging'] >= 5)]

ИЛИ

df  = df[(df['Assigned to'].isin(names)) & (df['Aging'] >= 5)]

также есть очень хорошая подробная информация о приоритете оператора , который стоит прочитать.

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