假设我具有以下数据框:
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', 'def', 'wyx'], 'count': [30, 41, 363]})
end
c count
abc 30
def 41
wyx 363
答案 0 :(得分:1)
您应该做的第一件事就是将其转换为日期时间类型,然后可以减去和分组:
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