python - Pandas 找到满足条件的日期之间的持续时间?

标签 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 和其他技巧来实现此目的的方法,但似乎没有任何效果。

我确实想出了我认为可以在 pandas 中使用 2 个嵌套 for 循环或 iterrrows 的方法,但由于我的数据集的大小,使用嵌套循环将不会真正起作用。

有人有什么想法吗?

最佳答案

我得到了一些不同的输出:

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

关于python - Pandas 找到满足条件的日期之间的持续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51327498/

相关文章:

Python datetime 和 pandas 为同一日期提供不同的时间戳

java - 代码审查 : java Dates diff (in day resolution)

python - 具有两个预训练 ResNet 50 的连体神经网络 - 测试模型时出现奇怪的行为

python - 如何链接涉及 'index' 操作的 pandas 管道操作?

python - 从系列中删除零的最快方法是什么

python - 属性错误 : 'dataframe' object has no attribute 'data_type'

java - 日历分钟未给出正确的分钟

python - scipy.optimize.leastsq 有界约束

python - 如何合并两个具有不同日期时间索引的 Pandas 时间序列对象?

python - Matplotlib 无法在 Python 3.5 上正确安装