熊猫找到满足条件的日期之间的持续时间?

时间:2018-07-13 14:31:55

标签: python pandas datetime pandas-groupby

我有一个看起来像这样的pandas DataFrame:

╔═══╦════════════╦═════════════╗
║   ║ VENDOR ID  ║ DATE        ║
╠═══╬════════════╬═════════════╣
║ 1 ║ 33         ║ 01/12/2018  ║
║ 2 ║ 33         ║ 03/12/2018  ║
║ 3 ║ 12         ║ 01/08/2018  ║
║ 4 ║ 12         ║ 01/15/2018  ║
║ 5 ║ 12         ║ 01/23/2018  ║
║ 6 ║ 33         ║ 05/12/2018  ║
║ 7 ║ 89         ║ 01/12/2018  ║
╚═══╩════════════╩═════════════╝

我希望得到一个表,该表提供自上次出现相同的供应商ID以来的天数,例如:

╔═══╦════════════╦═════════════╗
║   ║ VENDOR ID  ║     GAP     ║
╠═══╬════════════╬═════════════╣
║ 1 ║ 33         ║ ----------  ║
║ 2 ║ 33         ║     60      ║
║ 3 ║ 12         ║ ----------  ║
║ 4 ║ 12         ║      7      ║
║ 5 ║ 12         ║      8      ║
║ 6 ║ 33         ║     60      ║
║ 7 ║ 89         ║ ----------  ║
╚═══╩════════════╩═════════════╝

我一直在尝试找到一种使用groupbys和其他技巧来实现此目的的方法,但是似乎什么也没用。

我确实提出了我认为可以使用2个嵌套的for循环或大熊猫中的迭代行列的方法,但是由于我的数据集很大,使用嵌套循环并不能真正起作用。

有人有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我得到一些不同的输出:

df['DATE'] = pd.to_datetime(df['DATE'])
df['GAP'] = df.groupby('VENDOR ID')['DATE'].diff().dt.days
print (df)
   VENDOR ID       DATE   GAP
1         33 2018-01-12   NaN
2         33 2018-03-12  59.0
3         12 2018-01-08   NaN
4         12 2018-01-15   7.0
5         12 2018-01-23   8.0
6         33 2018-05-12  61.0
7         89 2018-01-12   NaN

说明

  1. 转换列to_datetime
  2. 然后将groupbydiff
  3. 最后将timedeltas转换为days