使用Pandas使用两列获取行数

时间:2018-11-20 03:44:48

标签: python pandas

我有以下数据框:

         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 :(得分:0)

注释正确,认为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)

这尝试不使用for循环就将GRADE DATE上ID(CAMIS)上的违规数量存储在RESULT中。但是从以前使用城市数据开始,我会说您的里程可能会有所不同。