【问题标题】:How to test a condition on existing dataframe and put the results on a new column?如何测试现有数据框的条件并将结果放在新列上?
【发布时间】:2020-11-03 15:09:38
【问题描述】:
      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”。

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

【问题讨论】:

    标签: pandas dataframe data-science data-analysis


    【解决方案1】:

    你可以像这样使用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)
    

    【讨论】:

      【解决方案2】:

      您可以简单地使用您的代码输出创建一个新列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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-16
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-15
        • 1970-01-01
        相关资源
        最近更新 更多