在python pandas数据框架中重叠的日期正在崩溃



我正在从Twitter API下载推文,我需要删除重叠的日期,这样我就不会请求重复的推文,这会消耗掉我每月的下载配额。我的数据在pandas数据框中。下面是我在Python(或SQL)中拥有的和我想要做的事情的示例,但我不知道如何解决这个问题。在SAS中,我可以使用retain语句,但我不认为这在python中是一个选项。任何帮助都会很感激。谢谢。

p>
<表类="年代桌子">用户开始结束tbody><User101-01-2003-31-20User102-01-2004-30-20User110-01-2012-30-20User206-01-2008-31-20User207-15-2012-31-20User202-01-2004-30-20

您可以使用.GroupBy.agg()来聚合重叠的日期范围,如下所示:

# convert dates to datetime format
df['start'] = pd.to_datetime(df['start'], format='%m-%d-%y')
df['end'] = pd.to_datetime(df['end'], format='%m-%d-%y')
# sort by columns User and start 
df = df.sort_values(['User', 'start'])
# set group number of overlapping date ranges within the same user
g = df['start'].gt(df['end'].shift()).groupby(df['User']).cumsum()
# Aggregate the overlapping dates
df_out = df.groupby(['User', g], as_index=False).agg({'start': 'min', 'end': 'max'})

结果:

(将输入数据中的无效日期04-31-20修改为04-30-20):

print(df_out)
User      start        end
0  User1 2020-01-01 2020-04-30
1  User1 2020-10-01 2020-12-30
2  User2 2020-02-01 2020-04-30
3  User2 2020-06-01 2020-12-31

可选地,您还可以转换回日期格式,如下所示:

df_out['start'] = df_out['start'].dt.strftime('%m-%d-%y')
df_out['end'] = df_out['end'].dt.strftime('%m-%d-%y')
print(df_out)
User     start       end
0  User1  01-01-20  04-30-20
1  User1  10-01-20  12-30-20
2  User2  02-01-20  04-30-20
3  User2  06-01-20  12-31-20

最新更新