如果现有变量位于数据框中的两个值之间,则创建等于 1 的新变量
Posted
技术标签:
【中文标题】如果现有变量位于数据框中的两个值之间,则创建等于 1 的新变量【英文标题】:Creating new variable that equals to 1 if the existing variable lies between two values in dataframe 【发布时间】: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.08
和7.2
之间?
很抱歉我删除了它,这不是最终结果
那么您的第一次尝试对我来说效果很好。您也可以将结果乘以 1
而不是使用 astype(int)
:A['DM'] = 1.0 * ((A['DOWN'] <= A['Y']) & (A['Y'] <= A['UP']))
【参考方案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)
应该这样做。希望我在手机上回复时没有错字。
【讨论】:
以上是关于如果现有变量位于数据框中的两个值之间,则创建等于 1 的新变量的主要内容,如果未能解决你的问题,请参考以下文章