【问题标题】:Pandas: Find first occurrence - on daily basis in a timeseriesPandas:在时间序列中每天查找第一次出现
【发布时间】:2016-07-04 18:28:49
【问题描述】:

我正在为此苦苦挣扎,因此任何输入都表示赞赏。我想迭代数据框列中的值,并在每天看到一个值时返回第一个实例。 Groupby 看起来是一个不错的选择,但是当使用 df.groupby(grouper).first()grouper 设置为每天时,会看到以下输出。

In [95]:
df.groupby(grouper).first()

Out[95]:
            test_1
2014-03-04     1.0
2014-03-05     1.0

这只是给出在测试 _1 中看到该值的那一天,而不是每天重置 first() 这是我需要的(请参阅下面的所需输出)。

我想以以下格式保存看到此值的时间:

这是输入数据框:

                  test_1
2014-03-04 09:00:00 NaN
2014-03-04 10:00:00 NaN
2014-03-04 11:00:00 NaN
2014-03-04 12:00:00 NaN
2014-03-04 13:00:00 NaN
2014-03-04 14:00:00 1.0
2014-03-04 15:00:00 NaN
2014-03-04 16:00:00 1.0
2014-03-05 09:00:00 1.0

这是所需的输出:

                 test_1  test_output
2014-03-04 09:00:00 NaN NaN
2014-03-04 10:00:00 NaN NaN
2014-03-04 11:00:00 NaN NaN
2014-03-04 12:00:00 NaN NaN
2014-03-04 13:00:00 NaN NaN
2014-03-04 14:00:00 1.0 1.0
2014-03-04 15:00:00 NaN NaN
2014-03-04 16:00:00 1.0 NaN
2014-03-05 09:00:00 1.0 NaN

我只想在名为 test_output 的新列中标记事件首次发生的时间。

管理员。请注意,此问题与另一个标记为重复的问题不同,因为这需要滚动一天的第一次出现。

【问题讨论】:

标签: python pandas time-series


【解决方案1】:

试试这个,使用这个数据:

rng = pd.DataFrame( {'test_1': [None, None,None, None, 1,1, 1 , None, None, None,1 , None, None, None,]},  index = pd.date_range('4/2/2014', periods=14, freq='BH'))
rng

                    test_1
2014-04-02 09:00:00     NaN
2014-04-02 10:00:00     NaN
2014-04-02 11:00:00     NaN
2014-04-02 12:00:00     NaN
2014-04-02 13:00:00     1.0
2014-04-02 14:00:00     1.0
2014-04-02 15:00:00     1.0
2014-04-02 16:00:00     NaN
2014-04-03 09:00:00     NaN
2014-04-03 10:00:00     NaN
2014-04-03 11:00:00     1.0
2014-04-03 12:00:00     NaN
2014-04-03 13:00:00     NaN
2014-04-03 14:00:00     NaN

输出是这样的:

rng['test_output'] = rng['test_1'].loc[rng.groupby(pd.TimeGrouper(freq='D'))['test_1'].idxmin()]

                    test_1  test_output
2014-04-02 09:00:00     NaN          NaN
2014-04-02 10:00:00     NaN          NaN
2014-04-02 11:00:00     NaN          NaN
2014-04-02 12:00:00     NaN          NaN
2014-04-02 13:00:00     1.0          1.0
2014-04-02 14:00:00     1.0          NaN
2014-04-02 15:00:00     1.0          NaN
2014-04-02 16:00:00     NaN          NaN
2014-04-03 09:00:00     NaN          NaN
2014-04-03 10:00:00     NaN          NaN
2014-04-03 11:00:00     1.0          1.0
2014-04-03 12:00:00     NaN          NaN
2014-04-03 13:00:00     NaN          NaN
2014-04-03 14:00:00     NaN          NaN

【讨论】:

  • 感谢梅林感谢您的帮助。我尝试了您的 rng DF,它确实适用于您生成的测试数据。不幸的是,当我用我的数据框尝试这个时,我得到一个错误:我使用了data['test_output'] = data['Gap Higher Closed'].loc[data.groupby(pd.TimeGrouper(freq='D'))['Gap Higher Closed'].idxmin()] 这是错误dl.dropboxusercontent.com/u/32282382/error.txt
  • 这是我尝试使用的实际数据框。 data['Gap Higher Closed'].value_counts() Out[17]: 1.0 1755 Name: Gap Higher Closed, dtype: int64
  • 如果上面的代码有效。将其标记为正确-您应该使用数据的真实部分提出另一个问题。将您的真实和真实错误添加到新问题中-上面的代码适用于您在问题中提供的数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
  • 2023-02-25
  • 2019-01-26
  • 2019-10-20
  • 1970-01-01
  • 2018-03-19
相关资源
最近更新 更多