首页 > 解决方案 > 用另一列的值填充组中最后一项的一列

问题描述

我有每个案例的作业数据集。我试图unassigned用日期填写每个案例的最后一个case_closed

case_nb   attorney      cas_closed_date assigned    last_event
1         A             2015-07-02      2015-07-02  2015-07-02
2         B             2015-09-10      2015-09-10  2015-09-10
3         C             2016-03-24      2016-03-24  2016-03-24
4         D             2018-06-07      2013-10-21  2014-02-06
4         C             2018-06-07      2013-09-13  2013-09-13
4         F             2018-06-07      2018-03-31  2018-04-05

(对于复制:

df = pd.DataFrame({'assigned': {0: pd.Timestamp('2015-07-02'), 1: '2015-09-10', 2: '2016-03-24', 3: '2013-10-21', 4: '2013-09-13', 5: '2018-03-31'},
                    'attorney': {0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'C', 5: 'F'},
                    'cas_closed_date': {0: pd.Timestamp('2015-07-02'), 1: '2015-09-10', 2: '2016-03-24', 3: '2018-06-07', 4: '2018-06-07', 5: '2018-06-07'},
                    'case_nb': {0: 1, 1: 2, 2: 3, 3: 4, 4: 4, 5: 4},
                    'last_event': {0: pd.Timestamp('2015-07-02'), 1: '2015-09-10', 2: '2016-03-24', 3: '2014-02-06', 4: '2013-09-13', 5: '2018-04-05'}}

)

我的数据集包括案件编号、指定的律师、案件结案日期、指定律师的日期以及律师出现的最后一个事件。对于上面的例子,我希望最后一行是

4         F             2018-06-07      2018-03-31  2018-06-07

我已经看到了几种根据同一列中的数据填写 NA 的方法,例如这个问题。但是这些方式使用transform,我无法使用多列。

到目前为止我所使用的apply,但不是transform

def fixdate(gp):
    last_unasgn = gp.iloc[-1]['last_event']
    if gp.iloc[-1]['cas_closed_date'] > last_unasgn:
        return gp.iloc[-1]['cas_closed_date']
    else:
       return last_unasgn

asmt.groupby('evt_file_number').apply(lambda x: fixdate(x))
> 4  2018-06-07

有没有办法使用transform?如果没有,使用该聚合数据填充我的原始数据集的最佳方法是什么?

标签: pythonpandaspandas-groupby

解决方案


.transform操作将每个组的所有列作为一维 Series 传递给函数,而该.apply操作将每个组的所有列作为 DataFrame 传递给函数。因此,.transform一次在一个系列(或列)上.apply工作,并为整个 DataFrame(或所有列)工作。希望这可以帮助。


推荐阅读