我想使用pandas过滤出每个item_id的最新和最早日期的行。提前感谢您的帮助:)
| 最喜欢的|日期| date |
| - -----|- -----| ------------ |
| 八|2022-06-09 2022-06-09| 2022-06-09 |
| 八|2022-06- 10 2022-06-10 2022-06-10| 2022-06-10 |
| 八|2022-06-11 2022-06-11 2022-06-11| 2022-06-11 |
| 八|2022-06- 12 2022-06-12 2022-06-12| 2022-06-12 |
| 一百六十八|2022-06-09 2022-06-09| 2022-06-09 |
| 一百六十八|2022-06- 10 2022-06-10 2022-06-10| 2022-06-10 |
| 一百六十八|2022-06-11 2022-06-11 2022-06-11| 2022-06-11 |
| 一百六十八|2022-06- 12 2022-06-12 2022-06-12| 2022-06-12 |
| 一百六十八|2022-06-13 2022-06-13 2022-06-13| 2022-06-13 |
理想输出为:
| 最喜欢的|日期| date |
| - -----|- -----| ------------ |
| 八|2022-06-09 2022-06-09| 2022-06-09 |
| 八|2022-06- 12 2022-06-12 2022-06-12| 2022-06-12 |
| 一百六十八|2022-06-09 2022-06-09| 2022-06-09 |
| 一百六十八|2022-06-13 2022-06-13 2022-06-13| 2022-06-13 |
原始数据在这里:
item_id,favorite,date
1049977,8,2022-06-09
1049977,8,2022-06-10
1049977,8,2022-06-11
1049977,8,2022-06-12
1611924,168,2022-06-09
1611924,168,2022-06-10
1611924,168,2022-06-11
1611924,168,2022-06-12
1611924,168,2022-06-13
5条答案
按热度按时间1l5u6lss1#
输出:
unhi4e5o2#
这最好使用groupby操作来完成。在开始时,使用循环执行此操作可能很有吸引力,但随着行数的增加,这将严重影响性能。
使用groupby方法.first()和.last()给出了第一个和最后一个条目。请注意,您需要确保您的dataframe按指定日期的任何列进行排序。
.concat只是一种将结果放在一个df中的简单方法。也许还有更好的选择。
这个片段:
给我这个输出:
4c8rllxm3#
您可以在
groupby.apply
或transform(min)
和transform(max)
中使用最大值、最小值date
过滤组x6yk4ghg4#
这里有一个不需要对输入 Dataframe 进行排序的解决方案。对于每个
item_id
,它获取日期最早(最小)或最晚(最大)的行的索引值,然后使用这些索引值过滤原始 Dataframe 。vhipe2zx5#
替代方法: