Получить количество строк, используя два столбца с пандами - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть следующий фрейм данных:

         ID                DBA BUILDING     STREET   SCORE GRADE GRADE DATE
0  50054472  LE PAIN QUOTIDIEN      395  S END AVE       9     A 2016-10-13

Я хочу получить количество строк, которые удовлетворяют заданному критерию, когда я зацикливаюсь по строкам:

df = pd.read_csv(CSV_URL, parse_dates=['GRADE DATE'], keep_default_na=False)

for index, row in df.iterrows():
    df[(df['ID'] == row[0]) & df['GRADE DATE'] == pd.Timestamp(row[6])]

Однако,Я получаю эту ошибку:

TypeError: cannot astype a datetimelike from [datetime64[ns]] to [bool]

Я понимаю, что получаю Timestamp объект, используя parse_dates, поэтому я преобразую его в pd.Timestamp перед запросом.Любые идеи о том, где я иду не так?

1 Ответ

0 голосов
/ 20 ноября 2018

Комментарии верны, что df[(df['ID'] == row[0]) & df['GRADE DATE'] == pd.Timestamp(row[6])] выглядит так, как будто его нужно отредактировать как минимум до: df[(df['ID'] == row[0]) & (df['GRADE DATE'] == pd.Timestamp(row[6]))]

Почти всегда есть способ избежать использования петель for с пандами, панды советуют избегать петель for. Поскольку это, похоже, набор данных инспекций здоровья Нью-Йорка ...

import pandas as pd
CSV_URL = 'https://data.cityofnewyork.us/api/views/43nn-pn8j/rows.csv?accessType=DOWNLOAD'
df = pd.read_csv(CSV_URL, parse_dates=['GRADE DATE'], keep_default_na=False)

def id_counter(row):
  return df[(df['CAMIS'] == row[0]) & (df['GRADE DATE'] == row['GRADE DATE'])].shape[0]

df["RESULT"]=df.apply(id_counter, axis=1)

Это пытается сохранить количество нарушений в ID (CAMIS) в GRADE DATE в RESULT без использования цикла for. Но из-за того, что я раньше работал с городскими данными, я бы сказал, что ваш пробег может отличаться.

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