Python 数据帧的屏蔽和索引
我有一个关于犯罪统计的pandas数据框架,我想在其中屏蔽和计算数据集中犯罪值的总数:Python 数据帧的屏蔽和索引,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个关于犯罪统计的pandas数据框架,我想在其中屏蔽和计算数据集中犯罪值的总数: min=0 最大值=24 天数=df[::24].count()['Year'] 打印(天) df['daily_crime']=np.NAN 对于范围内的i(天): #打印(df.loc[df.index[24],“每日犯罪”]) 打印(df[min:max][df['Personfarlig_krim']=='Yes']) 最大+=24 最小+=24 上面我放置了一个最小和最大计数器,对于一天中的每个2
min=0
最大值=24
天数=df[::24].count()['Year']
打印(天)
df['daily_crime']=np.NAN
对于范围内的i(天):
#打印(df.loc[df.index[24],“每日犯罪”])
打印(df[min:max][df['Personfarlig_krim']=='Yes'])
最大+=24
最小+=24
上面我放置了一个最小和最大计数器,对于一天中的每个24小时,我想在我的数据框中添加一个额外的列,用于计算过去24小时Personfarlig\u krim
中Yes
计数的数量。这一行每天都应该放在一个单独的列中。我尝试过掩蔽和切片,然后分配一个给定的行,但到目前为止我没有运气
Unnamed: 0 District Neighbourhood.x Year Month Day Hour Weekday Sun Personfarlig_krim Date2
0 1 1 MANHATTAN 2015 4 1 0 4 False No 2015-04-01 00:00:00
1 2 1 MANHATTAN 2015 4 1 1 4 False No 2015-04-01 01:00:00
2 3 1 MANHATTAN 2015 4 1 2 4 False No 2015-04-01 02:00:00
3 4 1 MANHATTAN 2015 4 1 3 4 False No 2015-04-01 03:00:00
4 5 1 MANHATTAN 2015 4 1 4 4 False No 2015-04-01 04:00:00
上面我尝试了格式化数据。它应该有另一列,其中存储了过去24小时(24行)的犯罪率 您可以使用
groupby
和transform
:
df["Date2"] = pd.to_datetime(df["Date2"])
df["day_total"] = df.groupby(["Year","Month","Day"])["Personfarlig_krim"].transform(lambda d: sum(d.eq("Yes")))
print (df)
District Neighbourhood.x Year Month Day Hour Weekday Sun Personfarlig_krim Date2 day_total
0 1 MANHATTAN 2015 4 1 0 4 False No 2015-04-01 00:00:00 0
1 1 MANHATTAN 2015 4 1 1 4 False No 2015-04-01 01:00:00 0
2 1 MANHATTAN 2015 4 1 2 4 False No 2015-04-01 02:00:00 0
3 1 MANHATTAN 2015 4 1 3 4 False No 2015-04-01 03:00:00 0
4 1 MANHATTAN 2015 4 1 4 4 False No 2015-04-01 04:00:00 0
对于小于24的结果,将值更改回0:
df.loc[(df.groupby(["Year","Month","Day"])["day_total"].transform("count").ne(24)),"day_total"] = 0
你能添加样本数据和预期产出吗?嗯,这是个好问题。坦率地说,我不确定我是否对这件事有足够的了解,是否能够提供一个有保留的答案。@JonasGrønbek非常感谢你,亲爱的先生。作为数据科学和深度学习社区的一名受人尊敬的成员,我非常尊重您的意见。
长度不匹配:预期轴有74975个元素,新值有74976个元素
@baileyaldwin Trylambda d:sum(d.eq(“Yes”)
而不是lambda d:d.eq(“Yes”).sum()。原因可能是。问题仍然存在:(和lambda d:np.sum(d.eq(“Yes”))
?您的数据中哪里有NaN
?哦,它现在工作得很好。不过问题是,对于前24行(24小时),总和应该等于0,因为还没有完整的24小时。