如何找到列之间的差异,但仅适用于熊猫中的下一个非零值?

内森·巴拉(Nathan Ballou)

我有一个包含几百万行的DataFrame,每一行都与以下内容类似:

初始数据框

2017-06-13         NaT         NaT         NaT         NaT         NaT         NaT  2017-10-28
2017-10-02         NaT         NaT         NaT         NaT         NaT         NaT  2017-10-28
2017-10-30  2017-10-31         NaT  2017-10-31  2017-11-01  2017-11-02  2017-11-03  2017-11-03
2017-10-30  2017-10-30         NaT  2017-10-30         NaT  2017-10-30  2017-11-01  2017-11-01
2017-10-02         NaT         NaT         NaT         NaT         NaT         NaT  2017-10-28

每列都是流程中的一步,我试图找到一步一步的时间。NaT值表示已跳过该步骤,因此我想在计算中跳过该步骤并计算下一个步骤(非NaT)的时间。

在此示例中,对于第一行和第二行,我正在寻找最后一列与第一列之间的差异。对于第三行,我正在寻找第一和第二列,第四和第二列,第五和第四列等之间的差异。预期的输出类似于以下内容(如果使用天数):

NaT   0     0     0     0     0     0   137
NaT   0     0     0     0     0     0   111
NaT   1     0     0     1     1     1     0
NaT   0     0     0     0     0     2     0
NaT   0     0     0     0     0     0    26 

我敢肯定有一种方法可以使用for循环和if语句并减去日期,但是我希望使用一种更加矢量化的方法,因为DataFrame相当大。

JarroVGIT

好吧,我可以自由地创建一个可行的示例。请不要共享您的数据图片,因为期望重新创建MRE(最小可复制示例),这有助于更快地回答您的问题。

import numpy as np
import pandas as pd
from datetime import date, datetime

dic = {
    "col1": [datetime(2020, 1, 1), datetime(2020,2,1), datetime(2020,3,1), datetime(2020,4,1)],
    "col2": [datetime(2020, 1, 4), np.nan, datetime(2020,3,5), datetime(2020,4,2)],
    "col3": [np.nan, np.nan, np.nan, datetime(2020,4,4)],
    "col4": [datetime(2020, 1, 6), datetime(2020,2,10), datetime(2020,3,6), datetime(2020,4,5)],
}

df.ffill(axis=1, inplace=True)
df = df - df.shift(axis=1)
df

结果是:

    col1    col2    col3    col4
0   NaT 3 days  0 days  2 days
1   NaT 0 days  0 days  9 days
2   NaT 4 days  0 days  1 days
3   NaT 1 days  2 days  1 days

说明:ffill(axis=1)确保使用NaN(或NaT)的每一行都填充有先前的有效值。然后,我们从原始数据中减去移位后的数据框,以计算之间的天数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫:用第一列中的下一个非零值替换第一行中的所有0?

如何在熊猫数据框中找到值的下一个位置和它们之间的值计数?

R用下一个非零值替换数据框中的零

模式中的上一个和下一个数据切换仅适用于已分页的照片

禁用没有单选按钮的下一个按钮仅适用于 jquery 中的第一个元素

jQuery最近的()不适用于层次结构中的下一个元素

Ajax 函数不适用于 django 模板中“for”播放的下一个元素

找到唯一的列值,并将输出用于下一个查询

如何使Bash set -x仅适用于下一个命令,而无需创建子进程并且不调用set + x

获取熊猫数据框中的下一个非nan值

下一个查询参数不适用于django allauth用于Facebook登录

熊猫:如何比较列的值和下一个值

循环内的onclick值仅适用于表中的最后一个值

jQuery:.dialog()不适用于.classe选择器的下一个元素

添加按钮行不适用于下一个按钮

组件下一个/图像不适用于 CSS

下一个 JS 构建不适用于撇号

如何在excel列中获取下一个非空单元格的值

如何找到指定值之后的下一个零并提取其时间戳?

r - 使用数据框列中的下一个非 na 值进行计算

在列中查找“下一个”非空值

熊猫从零到下一个有效值内插NaN

foreach 中的表单操作仅适用于 php 的第一个值

如何仅通过保留首次事件来删除重复项,但仅适用于熊猫的一个类别

如何在SPSS Modeler中获取下一个非null值

比较熊猫系列中的上一个值和下一个值

上一个和下一个按钮不适用于Angular Bootstrap日历

下一个和上一个按钮不适用于多个日历

如何在Python枚举中优雅地找到下一个和上一个值?