我已经几次发现这个问题,但是我似乎无法针对我的具体情况给出答案,所以我希望有人可以帮助我。
我有下表(如果我确实尝试过,如果看起来不正确,我深表歉意):
ID Reservation_Date Booking_Date Pax
0 2020-06-12 2020-06-04 4
1 2020-06-12 2020-06-04 5
2 2020-06-12 2020-06-04 2
3 2020-06-12 2020-06-09 5
4 2020-06-11 2020-06-02 6
5 2020-06-11 2020-06-02 1
6 2020-06-11 2020-06-10 3
7 2020-06-11 2020-06-10 5
可以通过以下方式生成:
data = {
'Reservation Date' : ['2020-06-12', '2020-06-12', '2020-06-12', '2020-06-12', '2020-06-11','2020-06-11', '2020-06-11', '2020-06-11'],
'Booking Date' : ['2020-06-04', '2020-06-04', '2020-06-04', '2020-06-09', '2020-06-02', '2020-06-02', '2020-06-10', '2020-06-10'],
'Pax' : [4,5,2,5,6,1,3,5]
}
df = pd.DataFrame (data, columns = ['Reservation Date','Booking Date','Pax'])
我想要实现的是对pax进行汇总,并按预订日期分组,但仅在预订日期与预订日期之间的差值等于或大于7的情况下。
有2个输出我会很满意。
是列保留日期的汇总,每个日期包含1条记录,考虑到预订日期,为该日期保留的pax总和必须在保留日期之前7天或更长时间< / p>
记录相同的地方,但有一列增加了pax的总和(与选项1相同),但它在不同的行上表示相同保留日期的总和。
< / li>在预订日期前7天没有预订的人数的日期,该人数必须为0。
因此,选项1的示例输出为:
ID Reservation_Date Booking_Date Pax
0 2020-06-12 2020-06-04 11
1 2020-06-11 2020-06-02 7
和选项2:
ID Reservation_Date Booking_Date Pax Pax_Agg
0 2020-06-12 2020-06-04 4 11
1 2020-06-12 2020-06-04 5 11
2 2020-06-12 2020-06-04 2 11
3 2020-06-12 2020-06-09 5 11
4 2020-06-11 2020-06-02 6 7
5 2020-06-11 2020-06-02 1 7
6 2020-06-11 2020-06-10 3 7
7 2020-06-11 2020-06-10 5 7
我已经尝试使用以下方法创建布尔值“ cond”:
df['cond'] = (df['Reservation_Date']-df['Booking_Date']).dt.components.days >7
并将其用作我的groupby的输入,但是我无法使其正常工作。
希望有人可以帮助我!
答案 0 :(得分:0)
使用astype将日期列设置为日期。然后,您可以使用遮罩过滤数据框。最后,按预订日期分组并汇总您的目标列:
import pandas as pd
data = {
'Reservation Date' : ['2020-06-12', '2020-06-12', '2020-06-12', '2020-06-12', '2020-06-11','2020-06-11', '2020-06-11', '2020-06-11'],
'Booking Date' : ['2020-06-04', '2020-06-04', '2020-06-04', '2020-06-09', '2020-06-02', '2020-06-02', '2020-06-10', '2020-06-10'],
'Pax' : [4,5,2,5,6,1,3,5]
}
df = pd.DataFrame (data, columns = ['Reservation Date','Booking Date','Pax'])
df = df[df['Reservation Date'].astype('datetime64[ns]') >= df['Booking Date'].astype('datetime64[ns]') + pd.Timedelta(7, unit='D')]
df = df.groupby(['Reservation Date'])['Pax'].agg('sum')
print(df)