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

如何计算一年中每个月每个 ID 的日期数?

如何解决如何计算一年中每个月每个 ID 的日期数?

任务:

计算2021年每个月每个ID出现的频率

  • 频率公式:每个 ID 每月内的日期计数(例如 ID:44;月份:01-2021;频率:3)

示例:

times = [
    '2021-02-18','2021-03-02','2021-04-23','2021-01-18','2021-01-19','2021-01-20','2021-01-03','2021-02-04','2021-02-04'
] 

id = [1,1,44,46,46]

df = pd.DataFrame({'ID':id,'Date': pd.to_datetime(times)})

df = df.reset_index(drop=True)

print(df)

   ID       Date
0   1 2021-02-18
1   1 2021-03-02
2   1 2021-03-02
3   1 2021-04-23
4  44 2021-01-18
5  44 2021-01-19
6  44 2021-01-20
7  46 2021-01-03
8  46 2021-02-04
9  46 2021-02-04

期望的输出

   id  01_2021  02_2021  03_2021  04_2021
0   1        0        1        2        1
1  44        3        0        0        0
2  46        1        2        0        0

解决方法

使用 crosstab 将日期时间转换为格式为 models 的字符串:

MM-YYYY

月份周期解决方案类似,使用Series.dt.to_period

df = pd.crosstab(df['ID'],df['Date'].dt.strftime('%m_%Y')).reset_index().rename_axis(None,axis=1)
print(df)
   ID  01_2021  02_2021  03_2021  04_2021
0   1        0        1        2        1
1  44        3        0        0        0
2  46        1        2        0        0

编辑:在 df = pd.crosstab(df['ID'],df['Date'].dt.to_period('m')).reset_index().rename_axis(None,axis=1) print(df) ID 2021-01 2021-02 2021-03 2021-04 0 1 0 1 2 1 1 44 3 0 0 0 2 46 1 2 0 0 中使用了半个月的 SMS Dateoffset

resample

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