每年根据条件查找首次出现

时间:2018-06-19 11:51:47

标签: python pandas datetime dataframe pandas-groupby

在下面的数据集中,我想找到1的发生日期,如果1连续至少重复3天(例如)重复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

最实用的方法是什么?

2 个答案:

答案 0 :(得分:1)

这是一种方式。您从日期系列中提取年份。然后过滤分层总和大于等于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

答案 1 :(得分:0)

过滤strat等于1的df

df = df[df.strat == 1]

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

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