Как найти все строки, соответствующие условию в Panda - PullRequest
0 голосов
/ 14 июля 2020
import numpy as np
import pandas as pd

df = pd.read_csv('Salaries.csv',engine='python')

print( df[ df['JobTitle'].value_counts()==1 ] )

Я пытаюсь получить строку, если задание в JobTitle появляется один раз.

Однако я продолжаю получать эту ошибку: pandas .core.indexing.IndexingError: Unalignable boolean Series предоставляется как индексатор (индекс логической серии и индексированного объекта не совпадают).

Вот файл Salaries.csv:

Id,EmployeeName,JobTitle,BasePay,OvertimePay,OtherPay,Benefits,TotalPay,TotalPayBenefits,Year,Notes,Agency,Status 1,NATHANIEL FORD,GENERAL MANAGER-METROPOLITAN TRANSIT AUTHORITY,167411.18,0.0,400184.25,,567595.43,567595.43,2011,,San Francisco, 2,GARY JIMENEZ,CAPTAIN III (POLICE DEPARTMENT),155966.02,245131.88,137811.38,,538909.28,538909.28,2011,,San Francisco, 3,ALBERT PARDINI,CAPTAIN III (POLICE DEPARTMENT),212739.13,106088.18,16452.6,,335279.91,335279.91,2011,,San Francisco, 4,CHRISTOPHER CHONG,WIRE ROPE CABLE MAINTENANCE MECHANIC,77916.0,56120.71,198306.9,,332343.61,332343.61,2011,,San Francisco,

Извините, если это трудно читать - если да, то вот pastebin: https://pastebin.com/raw/eCfVj1Et

Ответы [ 2 ]

2 голосов
/ 14 июля 2020

Другое решение с использованием transform:

df[df.groupby('JobTitle')['JobTitle'].transform('count').eq(1)]
0 голосов
/ 14 июля 2020

Вы можете сделать это в одной строке кода, комбинируя значения индекса value_counts(), где серия равна 1:

df[df['A'].isin((df['A'].value_counts() == 1).replace({False:np.nan}).dropna().index)]

Возможно, немного лучше и проще для понимания, в двух строках кода:

values = df['A'].value_counts()
df[df['A'].isin(values.index[values.eq(1)])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...