如何测试现有数据框的条件并将结果放在新列上?

How to test a condition on existing dataframe and put the results on a new column?

      ID   Open  Close     SMA        EMA
30  UNITY  11.50  11.53  12.576  12.715570
31  UNITY  11.44  11.34  12.399  12.626823
32  UNITY  11.26  11.74  12.273  12.569609
33  UNITY  11.72  11.61  12.150  12.507699
34  UNITY  11.51  11.43  11.994  12.438170
35  UNITY  11.85  11.17  11.844  12.356352

我想测试下面的代码

df[(df.SMA >= df.EMA) & 
    (((df.Open <= df.SMA) & (df.Close >= df.EMA)) 
        | ((df.Close >= df.EMA) & (df.Open <= df.EMA)) 
        | ((df.Open >= df.SMA) & (df.Close <= df.SMA)))]

在我的数据框上创建一个新列“TAZ”,对于每一行,如果满足条件,则反映“100”,否则反映“0”。

虽然代码按照我的要求工作,但我无法将结果放在单独的列中。不胜感激!

您可以这样使用 np.where

# filter condition
cond = (df.SMA >= df.EMA) & (((df.Open <= df.SMA) & (df.Close >= df.EMA)) | ((df.Close >= df.EMA) & (df.Open <= df.EMA)) | ((df.Open >= df.SMA) & (df.Close <= df.SMA)))

df['TAZ'] = np.where(cond, 100, 0)

您只需使用您的代码输出创建一个新列 TAZ。通过将结果乘以 100,如果满足条件,您将得到 100,否则将为 0。如果您喜欢它作为字符串,您可以使用 astype()

进行转换
df['TAZ'] = ((df.SMA >= df.EMA) & (((df.Open <= df.SMA) & (df.Close >= df.EMA)) | ((df.Close >= df.EMA) & (df.Open <= df.EMA)) | ((df.Open >= df.SMA) & (df.Close <= df.SMA)))) * 100