【问题标题】:Creating new variable that equals to 1 if the existing variable lies between two values in dataframe如果现有变量位于数据框中的两个值之间,则创建等于 1 的新变量
【发布时间】:2020-06-12 12:53:01
【问题描述】:

这是我的数据框。

如果我的“Y”变量介于上面数据框中的两个值之间(UP、DOWN),我想创建一个等于 1 的新变量。

我尝试了许多代码,但没有令人满意的结果。 这些是我尝试过的代码;

第一个: A['DM'] = ((A.Y >A['UP']) & (A.Y <A['DOWN'])).astype(int)

第二个:A['DM']=1 if [(A['Y'] > A['DOWN']) & (A['Y'] < A['UP'])]

【问题讨论】:

  • 请不要发图片。图片没用。请浏览how-to-make-good-reproducible-pandas-examples
  • 您的第一个语法似乎是正确的,但您确定最终结果应该是您发布的内容吗?在我看来0不在8.087.2之间?
  • 很抱歉我删除了它,这不是最终结果
  • 那么您的第一次尝试对我来说效果很好。您也可以将结果乘以 1 而不是使用 astype(int)A['DM'] = 1.0 * ((A['DOWN'] <= A['Y']) & (A['Y'] <= A['UP']))

标签: python pandas range between dummy-variable


【解决方案1】:

这样试试:

import pandas as pd
import numpy as np

A["DM"]=np.where((A.Y>A.up) & (A.Y<A.down),1,0)

你需要像 np.where 这样的东西来逻辑比较 2 个类似对象的数组 - 否则你需要明智地做那个元素。

【讨论】:

    【解决方案2】:

    np.where() 是要走的路:

    import numpy as np
    A[‘DM’] = np.where(((A[‘Y’] > A[‘up’]) & (A[‘Y’] < A[‘down’])) | ((A[‘Y’] < A[‘up’]) & (A[‘Y’] > A[‘down’])), 1, 0)
    

    应该这样做。希望我在手机上回复时没有错字。

    【讨论】:

      猜你喜欢
      • 2018-09-08
      • 1970-01-01
      • 2018-06-05
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-04
      相关资源
      最近更新 更多