gpt4 book ai didi

python - Pandas - 对于一列中的给定日期,另一列中有多少个日期小于该日期?

转载 作者:行者123 更新时间:2023-12-01 02:16:24 25 4
gpt4 key购买 nike

我有下表:

id | invoice_date | payment_date
--------------------------------
1 | 2017-03-01 | 2017-03-03
1 | 2017-03-04 | 2017-03-06
1 | 2017-03-04 | 2017-03-11
1 | 2017-03-15 | 2017-03-16
1 | 2017-03-21 | 2017-03-31
2 | 2017-01-22 | 2017-01-22
2 | 2017-01-24 | 2017-01-25

我想知道:对于表中的任何给定索引,有多少个索引较小的付款日期小于索引的发票日期?即,对于给定的发票日期,有多少个付款日期较早发生?理想情况下,我想为每个 id (分组依据)执行此操作,所以我有类似的内容:

id | invoice_date | payment_date | num_pay_dates_less_than_inv_date
------------------------------------------------------------------
1 | 2017-03-01 | 2017-03-03 | 0
1 | 2017-03-04 | 2017-03-06 | 1
1 | 2017-03-04 | 2017-03-11 | 1
1 | 2017-03-15 | 2017-03-16 | 3
1 | 2017-03-21 | 2017-03-31 | 4
2 | 2017-01-22 | 2017-01-22 | 0
2 | 2017-01-24 | 2017-01-25 | 1

最佳答案

Numpy 解决方案。使用广播比较,然后沿第一个轴进行 cumsum 操作。最后提取对角元素并赋值给df

v = (df.invoice_date[:, None] > df.payment_date.values).cumsum(1)
df['num_pay_dates_less_than_inv_date'] = v[np.diag_indices_from(v)]

df

id invoice_date payment_date num_pay_dates_less_than_inv_date
0 1 2017-03-01 2017-03-03 0
1 1 2017-03-04 2017-03-06 1
2 1 2017-03-04 2017-03-11 1
3 1 2017-03-15 2017-03-16 3
4 1 2017-03-21 2017-03-31 4
5 2 2017-01-22 2017-01-22 0
6 2 2017-01-24 2017-01-25 1

这要求两列都采用日期时间格式(否则,比较是按字典顺序进行的,这通常没问题,但这取决于您当时的日期格式)。

关于python - Pandas - 对于一列中的给定日期,另一列中有多少个日期小于该日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48334761/

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