假设我有这样一个df
id | date | type
1 | 2023-03-01T10:00:00Z | A
1 | 2023-03-01T12:00:00Z | A
1 | 2023-03-05T09:09:00Z | D
1 | 2023-03-02T12:00:00Z | B
1 | 2023-03-02T19:00:00Z | C
1 | 2023-03-03T22:00:00Z | B
1 | 2023-03-04T12:00:00Z | C
1 | 2023-03-05T08:00:00Z | C
1 | 2023-03-04T17:00:00Z | C
2 | 2023-02-01T12:00:00Z | A
2 | 2023-02-03T10:00:01Z | A
2 | 2023-02-03T11:00:00Z | A
2 | 2023-02-02T13:13:13Z | A
按日期排序后(供参考),
id | date | type
1 | 2023-03-01T10:00:00Z | A
1 | 2023-03-01T12:00:00Z | A
1 | 2023-03-02T12:00:00Z | B
1 | 2023-03-02T19:00:00Z | C
1 | 2023-03-03T22:00:00Z | B
1 | 2023-03-04T12:00:00Z | C
1 | 2023-03-04T17:00:00Z | C
1 | 2023-03-05T08:00:00Z | C
1 | 2023-03-05T09:09:00Z | D
2 | 2023-02-01T12:00:00Z | A
2 | 2023-02-02T11:00:00Z | A
2 | 2023-02-02T13:13:13Z | A
2 | 2023-02-03T12:00:00Z | A
注意:给定的(id,date)组合不可能具有相同的“类型”
最终df应如下所示,
id | old_type | new_type | change_date
1 | A | B | 2023-03-02T12:00:00Z
1 | B | C | 2023-03-02T19:00:00Z
1 | C | B | 2023-03-03T22:00:00Z
1 | B | C | 2023-03-04T12:00:00Z
1 | C | D | 2023-03-05T09:09:00Z
将没有id 2的记录,因为不同日期之间类型没有变化。
对于我如何利用Pandas来操纵数据以实现这种转换,有什么建议吗?任何帮助都将不胜感激。先谢了。
1条答案
按热度按时间c9qzyr3d1#
您可以使用
groupby.shift
和一些过滤:输出: