我试图强制所有用户的日期最早从2023年1月1日开始,有3个用例:
1.如果已经有关于01/01/2023的数据,我想保留它并删除以前的行
1.如果在01/01/2023上没有数据,但存在较旧的行,则我希望将日期更新为01/01/2023
1.如果用户的第1行在2023年1月1日之后,则保留它。
我想我应该从groupby()开始,但我不知道该怎么做?
数据来源::
| 用户|日期|值|
| --|--|--|
| USER1| 2019 - 06 - 01| 1000 |
| USER1| 2023年1月1日| 1000 |
| USER1| 2019 - 02 - 21| 1200 |
| USER1| 2023年2月2日| 1300 |
| USER2| 2021年01月06日**| 1000 |
| USER2| 2019 - 02 - 21| 1200 |
| USER2| 2023年2月2日| 1250 |
| USER3| 2023年02月06日| 1250 |
df = pd.DataFrame({"USER" : ['USER1', 'USER1', 'USER1', 'USER1', 'USER2', 'USER2', 'USER2', 'USER3'],
"Date" :['01/06/2022', '01/01/2023', '01/02/2023', '02/02/2023', '01/06/2021', '01/02/2023', '02/02/2023', '02/06/2023'],
"Value" :['1000', '1000', '1200', '1300', '1000', '1200', '1250', '1250'],}
)
目标数据::
| 用户|日期|值||
| --|--|--|--|
| USER1| 2023年1月1日| 1000 |删除前一行,因为2023年1月1日已经有一行|
| USER1| 2019 - 02 - 21| 1200 ||
| USER1| 2023年2月2日| 1300 ||
| USER2| 2023年1月1日| 1000 |前值“01/06/2021”被强制为2023年1月1日|
| USER2| 2019 - 02 - 21| 1200 ||
| USER2| 2023年2月2日| 1250 ||
| USER3| 2023年02月06日| 1250 |保持价值不变,它已经在2023年1月1日之后|
3条答案
按热度按时间xiozqbni1#
如果我理解正确的话,你可以用
clip
强制一个最小日期,然后drop_duplicates
保留最新的一行:输出量:
中间体:
eoigrqb62#
我认为这是解决您的问题的最简单和最分解的方法
现在您可以打印结果
eulz3vhy3#
您可以用途: