【发布时间】:2020-08-17 17:29:56
【问题描述】:
我有一个带有索引列和另一列的数据框,该列用 1 或 0 标记当天是否发生了事件。
如果一个事件发生,它通常会在很长一段时间内连续发生。他们通常会标记是否发生了经济衰退,因此可能会连续 60-180 天被标记为 1,然后再次变为 0。
我需要做的是找到标记每个 1 序列开始和结束的日期。
这里有一些快速示例代码:
dates = pd.date_range(start='2010-01-01', end='2015-01-01')
nums = np.random.normal(50, 5, 1827)
df = pd.DataFrame(nums, index=dates, columns=['Nums'])
df['Recession'] = np.where((df.index.month == 3) | (df.index.month == 12), 1, 0)
对于示例数据框,值 1 出现在 3 月和 12 月,因此理想情况下,我应该有一个名为 [2010-03-01, 2010-03-31, 2010-12-01, 2010-12-30, ......, 2015-12-01, 2015-12-30] 的列表。
我知道我可以通过使用 for 循环找到这些值,但这似乎效率低下。我也尝试使用groupby,但找不到任何能提供我想要的结果的东西。
不确定是否有 pandas 或 numpy 方法可以在索引中搜索适当的条件。
【问题讨论】:
-
dates = df.loc[df['Recession'] != df['Recession'].shift(), 'date_column'] -
数据科学导论 - 密歇根大学 :-D 我也在第 4 周。