我有以下形式的汽车租赁预订数据:
location | day_of_drive | day_of_reservation | number_of_bookings
-------------------------------------------------------------------
foo | 01-01-2015 | 24-12-2014 | 1
foo | 01-01-2015 | 26-12-2014 | 1
foo | 01-01-2015 | 29-12-2014 | 3
foo | 01-01-2015 | 30-12-2014 | 2
foo | 01-01-2015 | 31-12-2014 | 1
foo | 02-01-2015 | 29-12-2014 | 2
foo | 02-01-2015 | 31-12-2014 | 1
foo | 02-01-2015 | 01-01-2015 | 1
bar | 25-06-2016 | 03-07-2016 | 1
.
.
.
我想要的是填充此数据集以包含进行 0 次预订的日期。
数据框已排序,首先按位置
排序,然后按day_of_drive
排序,然后按day_of_reservation
排序。
我想要的是一种有效的方法,可以在 day_of_reservation
变量在该变量的第一个观察值之间填充零值,该值对应于该变量的第一次预订 day_of_drive
/location
对,以及 day_of_drive
,对于给定的一对 位置
和 day_of_drive
本身。我遇到过使用拆栈,然后使用 fillna(0)
,然后堆叠回来的解决方案,但我不认为我可以将它们用作每对 location
和day_of_drive
有一个不同的最小和最大日期,我想在之间填充。
期望的输出:
location | day_of_drive | day_of_reservation | number_of_bookings
-------------------------------------------------------------------
foo | 01-01-2015 | 24-12-2014 | 1
foo | 01-01-2015 | 25-12-2014 | 0
foo | 01-01-2015 | 26-12-2014 | 1
foo | 01-01-2015 | 27-12-2014 | 0
foo | 01-01-2015 | 28-12-2014 | 0
foo | 01-01-2015 | 29-12-2014 | 3
foo | 01-01-2015 | 30-12-2014 | 2
foo | 01-01-2015 | 31-12-2014 | 1
foo | 02-01-2015 | 29-12-2014 | 2
foo | 02-01-2015 | 30-12-2014 | 0
foo | 02-01-2015 | 31-12-2014 | 1
foo | 02-01-2015 | 01-01-2015 | 1
bar | 25-06-2016 | 03-07-2016 | 1
bar | 25-06-2016 | 04-07-2016 | 0
.
.
.
我感觉解决方案是使用 groupby
。
最佳答案
您可以将以下内容与 set_index
、groupby
和 resample
结合使用:
#First make sure day_of_reservation is a datetime dtype:
df['day_of_reservation'] = pd.to_datetime(df['day_of_reservation'])
df.set_index('day_of_reservation')\
.groupby(['location','day_of_drive'], sort=False)['number_of_bookings']\
.resample('D').asfreq().fillna(0)\
.reset_index()
输出:
location day_of_drive day_of_reservation number_of_bookings
0 foo 01-01-2015 2014-12-24 1.0
1 foo 01-01-2015 2014-12-25 0.0
2 foo 01-01-2015 2014-12-26 1.0
3 foo 01-01-2015 2014-12-27 0.0
4 foo 01-01-2015 2014-12-28 0.0
5 foo 01-01-2015 2014-12-29 3.0
6 foo 01-01-2015 2014-12-30 2.0
7 foo 01-01-2015 2014-12-31 1.0
8 foo 02-01-2015 2014-12-29 2.0
9 foo 02-01-2015 2014-12-30 0.0
10 foo 02-01-2015 2014-12-31 1.0
11 foo 02-01-2015 2015-01-01 1.0
12 bar 25-06-2016 2016-03-07 1.0
关于python - 对于不一致的日期范围,用零填充 pandas groupby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48827580/