按周对数据框进行分组,并将一周内的最小和最大日期获取到新列

时间:2019-05-17 07:50:56

标签: python-3.x pandas pandas-groupby

我有一个数据框,其中包含列“ call_date”(这是通话日期)和“ call_week”(这是星期数)(一周不一定从星期一或星期日开始,不一定持续7天): / p>

enter image description here

我想做的是将新列添加到数据框,其中包含以“-”分隔的星期边界日期。例如,如果我们有一个WEEK 68,其最小CALL_DATE2019-04-25,最大CALL_DATE2019-04-30,则新列应包含值{{1} }。

我尝试过: 2019-04-25 - 2019-04-30

dfg = df.groupby('WEEK')['CALL_DATE'].agg(['min', 'max']).reset_index()

enter image description here

然后我通过dfg将这些最小和最大列添加到df

join

现在,我尝试应用df = df.join(dfg, lsuffix = 'WEEK', rsuffix = 'WEEK')函数将包含结果的列连接起来:

lambda

但是我收到一个错误:df['WEEK_TEXT'] = df.apply(lambda x : x['min'].strftime("%d.%m.%Y") + ' - ' + x['max'].strftime("%d.%m.%Y"))

我该如何解决?

1 个答案:

答案 0 :(得分:1)

最好使用Series.dt.strftime

df['WEEK_TEXT'] = df['min'].dt.strftime("%d.%m.%Y") + ' - ' + df['max'].dt.strftime("%d.%m.%Y")

在您的解决方案中,按行进行的处理axis=1是必需的:

f = lambda x : x['min'].strftime("%d.%m.%Y") + ' - ' + x['max'].strftime("%d.%m.%Y")
df['WEEK_TEXT'] = df.apply(f, axis=1)