我一直在分析首尔自行车共享需求数据集,该数据集可在Seoul Bike Sharing Demand上获得。在我的分析过程中,我发现需要使用重采样方法。为了实现这一点,我将数据集加载到一个PandasDataFrame中,我将其命名为df。然后,我使用以下代码片段应用了所需的重采样方法:
label_encoders = {}
categorical_columns = list()
for column in df.columns:
if df.dtypes[column] in [np.int64, np.float64]:
pass
else:
if column != 'Date':
categorical_columns.append(column)
Label_encoder = LabelEncoder()
label_encoders[column] = Label_encoder
numerical_column = Label_encoder.fit_transform(df[column])
df[column] = numerical_column
ndf = df.copy()
ndf.set_index('Date', inplace = True)
我想绘制假日和租用自行车数量之间的相关性。
Holiday = ndf[ndf['Holiday'] == 0].resample('D')['Rented Bike Count'].sum()
但我希望它不包括不是假日的日子,在这种情况下,他们的假日列不应该是1(0 ->假日,1 ->非假日)。但是当我运行这段代码时,结果是这样的:
Date
2017-12-22 7184
2017-12-23 0
2017-12-24 2014
2017-12-25 3966
2017-12-26 0
...
2018-10-05 0
2018-10-06 0
2018-10-07 0
2018-10-08 0
2018-10-09 0
Freq: D, Name: Rented Bike Count, Length: 292, dtype: int64
例如,2017-12-23不是假日,但包含在结果中,其他日子如
2018-10-05.但是如果我运行代码,在非节假日做一个小的改变,它似乎工作正常
Holiday = ndf[ndf['Holiday'] == 1].resample('D')['Rented Bike Count'].sum()
而且它和预期的一样不包括在处理中的假日。我的意思是为什么会出现这个问题?在这种情况下我做错了什么?先谢谢你了
1条答案
按热度按时间drnojrws1#
我的意思是为什么会出现这个问题?在这种情况下我做错了什么?
这不是问题,你没有做错任何事情:-)
重新采样时间序列时,将聚合同一时间片的值。在您的示例中,您将每小时的TS转换为每日的TS,并计算
Rented Bike Count
的总和。当您过滤数据框以仅保留假日时,您预计只有18天(假日=0 / 24小时时,有432条记录)你是对的,但是请记住,你使用了
resample
,所以Pandas将返回一个DatetimeIndex
,它从第一个日期(第一个假日)到最后一个日期(最后一个假日)的freq=D
。因此,在您的情况下,2017年12月22日至2018年9月25日(278天)之间的所有日子:代码的输出是:
要只得到假日,你必须使用布尔掩码
m
:注意:您应该按索引(日期)对数据框进行排序,以更好地理解。