在下面的数据集中,我想找到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
最实用的方法是什么?
答案 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)