微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

条目在一年内至少两个不同的月份出现在每个索引中

如何解决条目在一年内至少两个不同的月份出现在每个索引中

索引日期(dd.mm.yy)

A 1.1.20
A 1.2.20
B 1.1.20
B 5.5.21
C 1.1.20
C 10.1.20
D 1.1.20
D 10.1.20
D 10.5.20

我想查看一个条目是否在至少两个不同的月份出现在每个索引一年内

所以对于索引 A,D 答案是 True 而对于 B,C 是 False 预期输出

真实的
B 错误
C 错误
D 真

我可以使用 Grouper 轻松查看它是否出现在至少两个不同的月份(或年份)

df.groupby([index,pd.Grouper(freq='M',key='date]).agg('count')

看看是否计数> 0

但如何轻松检查两个条件是否适用?

我尝试创建自己的 agg 函数或使用 Grouper。

解决方法

如果我们想要数据框的形状和以前一样:

df['date'] = pd.to_datetime(df.date,dayfirst=True)

def resampled_data(freq):
    return df.groupby(['index',pd.Grouper(key='date',freq=freq)]).index.transform('count')

yg = resampled_data('Y')
mg = resampled_data('M')

df['bool'] = ((yg >= 2) & (mg != 2)) | ((yg >= 3) & (mg >=2))

输出

    index   date    bool
0   A   2020-01-01  True
1   A   2020-02-01  True
2   B   2020-01-01  False
3   B   2021-05-05  False
4   C   2020-01-01  False
5   C   2020-01-10  False
6   D   2020-01-01  True
7   D   2020-01-10  True
8   D   2020-05-10  True
,
df_per_month = pd.DataFrame.from_dict(df.groupby([index,df.date.dt.year,df.date.dt.month]).groups.keys())
df_max_entries_in_a_year = df_per_month.groupby([0,1]).agg('count').reset_index().groupby([0])[2].agg('max')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。