使用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]

我知道我正在使用parse_dates获得一个Timestamp对象,所以这就是为什么我在查询之前将其转换为pd.Timestamp。你知道我哪里错了吗?

注释是正确的,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循环与panda一起使用,panda建议您避免使用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中。但与以前使用过的城市数据不同,我想说你的里程数可能会有所不同。

最新更新