如果现有变量位于数据框中的两个值之间,则创建等于 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.087.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 的新变量的主要内容,如果未能解决你的问题,请参考以下文章

如果另一个Dataframe值小于0,则替换R数据框中的值

做某事。如果在熊猫数据框中列中的值等于 1

如果值在列表中,则 Pandas 数据框中的重复行

如果特定列中的值不是熊猫数据框中的整数,则删除行

将列中的值转换为现有数据框中的行名

基于正则表达式合并数据框中的变量对