如何将原有图书借阅记录表转换为包含借书和还书日期字段的新表
实现方法
核心逻辑
按书籍维度对借阅记录分组,同组内按借阅日期升序排序后,取后一条记录的借阅日期作为当前记录的还书日期,分组最后一条记录的还书日期默认留空。
1. SQL 实现(适用数据库场景)
假设原表名为book_borrow,可使用窗口函数LEAD实现,语句如下:
SELECT Owner, Book, Date AS Pick_Date, LEAD(Date, 1) OVER ( PARTITION BY Book ORDER BY Date ASC ) AS Gave_Back_Book_Date FROM book_borrow ORDER BY Book, Pick_Date ASC;
参数说明:
PARTITION BY Book:按书名分组,不同书籍的借阅记录互不影响ORDER BY Date ASC:同组内按借阅日期从小到大排序,保证取到的是下一位借阅者的日期LEAD(Date, 1):取当前行之后第1行的Date值,若为分组最后一行则返回空值,正好匹配需求
2. Python Pandas 实现(适用本地表格处理场景)
假设原数据已读取为DataFrame对象df,实现代码如下:
import pandas as pd # 按书籍分组、日期排序后,将下一行的日期赋值给当前行的还书日期字段 df['Gave_Back_Book_Date'] = df.sort_values('Date').groupby('Book')['Date'].shift(-1) # 重命名原日期字段为取书日期 df = df.rename(columns={'Date': 'Pick_Date'})
3. Excel 实现(适用普通表格文件处理场景)
操作步骤如下:
- 先将表格按「Book」列升序、「Date」列升序排序
- 新增
Gave_Back_Book_Date列,假设表头在第1行、数据从第2行开始,B列为Book列、C列为原Date列,在第二行对应单元格输入公式:=IF(B2=B3,C3,"") - 公式下拉填充所有行即可
内容的提问来源于stack exchange,提问作者NGT
相关产品推荐
相关产品推荐

