在pandas中的每一行上迭代以评估条件

2024-09-27 07:30:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码

import pandas as pd
from pandas_datareader import data as web
import numpy as np
import math

data = web.DataReader('goog', 'yahoo')
df['lifetime'] = data['High'].asfreq('D').rolling(window=999999, min_periods=1).max() #To check if it is a lifetime high

如果表中每一行的df['High']接近其df['lifetime'],我如何比较它以得到一个布尔值(最好是1和0):

data['isclose'] = math.isclose(data['High'], data['lifetime'], rel_tol = 0.003)

任何帮助都将不胜感激


Tags: 代码fromimportnumpywebpandasdfdata
2条回答

您还可以使用pandas^{}函数:

import math

from pandas_datareader import data as web

data = web.DataReader("goog", "yahoo")

data["lifetime"] = data["High"].asfreq("D").rolling(window=999999, min_periods=1).max()

data["isclose"] = data.apply(
    lambda row: 1 if math.isclose(row["High"], row["lifetime"], rel_tol=0.003) else 0,
    axis=1,
)

print(data)

然而yudhiesh's solution使用^{}更快。 另见:Why is np.where faster than pd.apply

您可以使用np.where()

import numpy as np
import math

data['isclose'] = np.where(math.isclose(data['High'], data['lifetime'], rel_tol = 0.003), 1, 0)

相关问题 更多 >

    热门问题