【问题标题】:Find first occurrence each year with a criterion使用标准查找每年的第一次出现
【发布时间】:2018-11-28 09:05:48
【问题描述】:

在下面的数据集中,我想找到 1 的发生日期,如果 1 连续至少(比如)3 天重复,(如果 1 发生少于 3 天,它只是忽略)

date    strat
2006-01-01  0
2006-01-02  1
2006-01-03  1
2006-01-04  1
2006-01-05  0
2006-01-06  1
2006-01-07  0
…   
2059-12-27  0
2059-12-28  1
2059-12-29  1
2059-12-30  1
2059-12-31  0

最实用的方法是什么?

【问题讨论】:

  • if 1 repeats for at least for 3 days, I get the first occurrence day。那么如果 1 在一年中重复
  • 如果 1 在一年中重复

标签: python pandas datetime dataframe pandas-groupby


【解决方案1】:

这是一种方法。您从日期系列中提取年份。然后过滤 Strat sum 大于等于 3 的年份。最后,按日期对值进行排序并按年份删除重复项。

df['year'] = pd.to_datetime(df['date']).dt.year

res = df.loc[df.groupby('year')['strat'].transform('sum') >= 3]\
        .sort_values('date')\
        .drop_duplicates(subset=['year'])

print(res)

         date  strat  year
6  2006-12-26      1  2006

设置

修改以演示您希望应用的逻辑:

print(df)

          date  strat
0   2005-12-24      0
1   2005-12-25      0
2   2005-12-25      1
3   2005-12-25      0
4   2005-12-25      1
5   2005-12-26      0
6   2006-12-26      1
7   2006-12-26      1
8   2006-12-26      1
9   2006-12-27      1
10  2006-12-27      0

【讨论】:

  • 谢谢@jpp,但这里的一个问题是它在第一年工作得很好,但从第二年开始,它只列出每年的第一天,而不是标准适用的那一天。有什么建议吗?
  • @Behnam,对不起,我不确定你在找什么。您能否更新您的问题以说明上述解决方案如何不起作用?
  • 我更新了我的问题@jpp。现在我每天只有一个值。我认为现在更清楚了
  • @Behnam,“3 天连续”标准对我来说是全新的。您可能需要提出一个新问题。
【解决方案2】:

过滤strat等于1的df

df = df[df.strat == 1]

在您的 df 中删除重复的行(如果您有更多列并且您想要,您可以写入 subset=['date', 'strat'])

df.drop_duplicates(subset=None, keep='first', inplace=True)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多