Python Pandas .Apply 函数到向量化形式

标签 python pandas

我正在尝试将以下 .apply 转换转换为运行速度更快的矢量化形式。我试过 .where,也试过普通的 bool 索引,但我的解决方案不起作用。请把我送到正确的方向

oneDayDelta = datetime.timedelta(days=1)
def correct_gps_datetimestamp(row):
    new_dts = row['GPS_DateTime']
    if row['Created'].hour == 0 and  row['GPS_DateTime'].hour > 10:
        new_dts = row['GPS_DateTime'] - oneDayDelta
    return(new_dts)

allData['GPS_DateTime'] = allData.apply(correct_gps_datetimestamp,axis=1)

无效的解决方案:

allData['GPS_DateTime'] = allData.where(allData['Created'].hour == 0 & allData['GPS_DateTime'].hour > 10,allData['GPS_DateTime'] - datetime.timedelta(days=1))

最佳答案

您可以使用 np.where 在一行中完成此操作:

allData['GPS_DateTime'] = np.where((allData['Created'].dt.hour == 0) &  (allData['GPS_DateTime'].dt.hour > 10), allData['GPS_DateTime'] - oneDayDelta, allData['GPS_DateTime'])

注意日期时间有 dt.hour访问器获取小时作为 int 值,这允许您比较整个 df,请注意我们在这里使用 & 而不是 and 因为我们正在比较数组。此外,由于运算符的优先级,我们必须在条件周围使用括号。

(allData['Created'].dt.hour == 0) &  (allData['GPS_DateTime'].dt.hour > 10)

因此,如果满足此条件,它会返回您的日期时间列减去一个数据时间增量,否则它只会返回您的列

关于Python Pandas .Apply 函数到向量化形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39660466/

相关文章:

python - FeatureTools:time_index参数中可以有多列吗?

python - 如何在每个 Spark 执行器中加载无法 pickle 的数据?

python - 如何合并列为 NaN 的连续行

python - 通过对每一行进行操作来在数据帧中创建列的 `pandas` 方法是什么?

python - 删除 Pandas 数据框中多次出现的重复值

Python 返回 "SyntaxError: invalid syntax sys module"

Python:列表附加问题

python - 将 defaultdict 传递给 df

python - numpy:将图像形状从 224 x 224 x 3 更改为 3 x 224 x 224 的最快方法

python - 如何将 numpy 数组附加到 pandas 数据框