【发布时间】:2018-10-31 14:55:55
【问题描述】:
与this one 类似的问题,但有一些修改:
我们应该只填写该组的最小值和最大值之间的日期,而不是填写整个列的最小和最大日期之间的每个组的缺失日期,然后输出每组最后一行的数据框
可重现的例子:
x = pd.DataFrame({'dt': ['2016-01-01','2016-01-03', '2016-01-04','2016-01-01','2016-01-01','2016-01-04']
,'amount': [10.0,30.0,40.0,78.0,80.0,82.0]
, 'sub_id': [1,1,1,2,2,2]
})
视觉上:
dt sub_id amount
0 2016-01-01 1 10.0
1 2016-01-03 1 30.0
2 2016-01-04 1 40.0
3 2017-01-01 2 78.0
4 2017-01-01 2 80.0
5 2017-01-04 2 82.0
我需要的输出:
dt sub_id amount
0 2016-01-01 1 10.0
1 2016-01-02 1 10.0
2 2016-01-03 1 30.0
3 2016-01-04 1 40.0
4 2017-01-01 2 80.0
5 2017-01-02 2 80.0
6 2017-01-03 2 80.0
7 2017-01-04 2 82.0
我们按 dt 和 sub_id 分组。如您所见,在 sub_id=1 中,为 2016-01-02 添加了一行,并且由于前一行为 10.0,因此金额被估算为 10.0(假设数据预先排序以启用此功能)。对于 2017-01-02 和 2017-01-03 添加了 sub_id=2 行,金额为 80.0,因为这是该日期之前的最后一行。 2017-01-01 的第一行也被删除了,因为我们只想保留每个日期和 sub_id 的最后一行。
寻找最有效的方法来执行此操作,因为真实数据有数百万行。我有一个使用 lambda 函数并将它们应用于 sub_id 组的当前方法,但我觉得我们可以做得更好。
谢谢!
【问题讨论】:
标签: python pandas pandas-groupby