python - 用另一列的值填充组中最后一项的一列
问题描述
我有每个案例的作业数据集。我试图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
?如果没有,使用该聚合数据填充我的原始数据集的最佳方法是什么?
解决方案
该.transform
操作将每个组的所有列作为一维 Series 传递给函数,而该.apply
操作将每个组的所有列作为 DataFrame 传递给函数。因此,.transform
一次在一个系列(或列)上.apply
工作,并为整个 DataFrame(或所有列)工作。希望这可以帮助。
推荐阅读
- git - 在 Git 提交期间禁用重命名检测以保留历史记录
- c - CVI GUI 中的定时功能
- javascript - 与复选框一起使用的按钮。不能让它们在列中相互粘连
- qt - 有没有办法在 qml 中键入从 json 解析的对象
- javascript - 修复:NextJS 不允许插件设置更改 HTML(防止重新渲染?)
- node.js - 如何将 NODE_SKIP_PLATFORM_CHECK 环境变量设置为 1 以跳过版本检查
- api - 地理服务器的用户接口
- javascript - 以角度 7 显示进度条以进行文件上传
- pytorch - 为什么 Pytorch 中用 group 参数实现的 depthwise_conv2d 比 Conv2d 慢?
- crud - 使用 modal 的 Laravel 8 crud 不向数据库添加数据