gpt4 book ai didi

python Pandas : how to take only the earliest date in each group

转载 作者:太空宇宙 更新时间:2023-11-04 04:56:24 24 4
gpt4 key购买 nike

这是我为这个问题创建的示例数据集:

data1 = pd.DataFrame([['1','303','3/7/2016'],
['4','404','6/23/2011'],
['7','101','3/7/2016'],
['1','303','5/6/2017']],
columns=["code", "ticket #", "CB date"])
data1['CB date'] = pd.to_datetime(data1['CB date'])
data2 = pd.DataFrame([['1','303','2/5/2016'],
['4','404','6/23/2011'],
['7','101','3/17/2016'],
['1','303','4/6/2017']],
columns=["code", "ticket #", "audit date"])
data2['audit date'] = pd.to_datetime(data2['audit date'])
print(data1)
print(data2)
code ticket # CB date
0 1 303 2016-03-07
1 4 404 2011-06-23
2 7 101 2016-03-07
3 1 303 2017-05-06
code ticket # audit date
0 1 303 2016-02-05
1 4 404 2011-06-23
2 7 101 2016-03-17
3 1 303 2017-04-06

我想合并两个 df,并确保 CB 日期始终在审核日期或之后:

data_all = data1.merge(data2, how='inner', on=['code', 'ticket #'])
data_all = data_all[data_all['audit date'] <= data_all['CB date']]
print(data_all)
code ticket # CB date audit date
0 1 303 2016-03-07 2016-02-05
2 1 303 2017-05-06 2016-02-05
3 1 303 2017-05-06 2017-04-06
4 4 404 2011-06-23 2011-06-23

但是,我只想在每个审计日期之后保留最早的 CB 日期行。所以在上面的输出中,第 2 行不应该存在,因为第 1 行和第 2 行都有相同的审计日期 2016/2/5,但我只想保留第 1 行,因为 CB 日期更接近 2016/2/5 比第 2 行 CB 日期。

期望的输出:

code ticket #    CB date audit date
0 1 303 2016-03-07 2016-02-05
3 1 303 2017-05-06 2017-04-06
4 4 404 2011-06-23 2011-06-23

我知道在 SQL 中我必须首先 gorupby code & ticket # & Audit date,然后按升序排列 CB date,然后在每组中取项目 rank = 1;但是如何在 Python/Pandas 中执行此操作?

我在这里阅读了其他帖子,但我仍然不明白,所以非常感谢这里的一些建议。

我读过的几篇文章包括:

  1. Pandas Groupy take only the first N Groups
  2. Pandas: select the first couple of rows in each group

最佳答案

我会通过可选的 sort_values 调用和 drop_duplicates 调用来完成此操作。

data_all.sort_values(data_all.columns.tolist())\
.drop_duplicates(subset=['CB date'], keep='first')
  code ticket #    CB date audit date
0 1 303 2016-03-07 2016-02-05
2 1 303 2017-05-06 2016-02-05
4 4 404 2011-06-23 2011-06-23

我说 sort_values 调用在这里是可选的,因为您的数据似乎已经排序。如果不是,请确保这是您解决方案的一部分。

关于 python Pandas : how to take only the earliest date in each group,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46961529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com