如何解决熊猫groupby计数天数
假设我具有以下数据框:
df = pd.DataFrame({'c': ['abc','def','wyx','abc','wyx'],'begin_date': ['2020-01-01','2000-12-23','2003-07-07','2005-03-02','2004-01-01'],'end_date': ['2020-01-31','2001-02-02','2004-03-02','2005-04-01','2004-07-04']})
df
c begin_date end_date
abc 2020-01-01 2020-01-31
def 2000-12-23 2001-02-02
wyx 2003-07-07 2004-03-02
abc 2005-03-02 2005-04-01
wyx 2004-01-01 2004-07-04
我想按c分组并计算该行c在begin_date
和end_date
之间的唯一天数,我的最终数据帧将是:
end = pd.DataFrame({'c': ['abc','count': [30,41,363]})
end
c count
abc 30
def 41
wyx 363
解决方法
您应该做的第一件事就是将其转换为日期时间类型,然后可以减去和分组:
s = (pd.to_datetime(df.end_date) - pd.to_datetime(df.begin_date)).dt.days
s.groupby(df['c']).sum()
更新:要删除重复的日期,我们可以重新采样:
df['begin_date'] = pd.to_datetime(df['begin_date'])
df['end_date'] = pd.to_datetime(df['end_date'])
(pd.concat(pd.DataFrame({
'c':x['c'],'count':pd.date_range(x.begin_date,x.end_date)
}) for _,x in df.iterrows())
.drop_duplicates()
.groupby('c').size()
.reset_index(name='count')
)
输出:
c count
0 abc 62
1 def 42
2 wyx 364
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。