如何解决如何计算一年中每个月每个 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 举报,一经查实,本站将立刻删除。