具有以下格式的数据框
data = {'regions':["USA", "USA", "USA", "FRANCE", "FRANCE","FRANCE"],
'dates':['2024-08-03', '2024-08-10', '2024-08-17','2024-08-03', '2024-08-10', '2024-08-17'],
'values': [3, 4, 5, 7, 8,0],
}
df = pd.DataFrame(data)
regions dates values
0 USA 2024-08-03 3
1 USA 2024-08-10 4
2 USA 2024-08-17 5
3 FRANCE 2024-08-03 7
4 FRANCE 2024-08-10 8
5 FRANCE 2024-08-17 0
需要将此 df 从长格式更改为宽格式。使用最近的日期作为当前日期,其他两个日期将是滞后日期。预期输出如下
regions dates values_lag2 values_lag1 values
USA 2024-08-17 3 4 5
FRANCE 2024-08-17 7 8 0
目前我使用 for 循环手动更改格式。只是想知道是否有更优雅的方法来实现它。谢谢
你可以使用
pivot_table
:给出
如果每个列的日期
regions
可能相同,则将列转换为日期时间,进行数据透视,更改列名称并添加具有最大date
s 的列:另一个想法是,如果可能的话,不同的日期时间只需要排序、添加排序、计数器
groupby.cumcount
和使用辅助列进行旋转g
: