遮罩和索引熊猫数据框

时间:2020-05-27 15:26:10

标签: python pandas dataframe

我有一个关于犯罪统计信息的熊猫数据框,我想在其中屏蔽并统计数据集中的犯罪值总数:

min = 0
max = 24

days = df[::24].count()['Year']
print(days)
df['daily_crime'] = np.NAN

for i in range(days):
    #print(df.loc[df.index[24], 'daily_crime'])
    print(df[min:max][df['Personfarlig_krim'] == 'Yes'])
    max += 24
    min += 24

在上述放置器中,有一个最小值和最大值计数器,对于一天中的24小时中的每一个,我想在数据框中添加一个额外的列,该列用于对{{1 }}最近24小时内。该行应每天放置在单独的列中。我尝试了遮罩和切片,然后分配了给定的行,但是到目前为止我还没有运气。

Yes

以上,我尝试格式化数据。假设有另一列存储了最近24小时(24行)的犯罪率。

1 个答案:

答案 0 :(得分:1)

您可以使用groupbytransform

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