当前位置: 首页 > 知识库问答 >
问题:

根据给定系列创建具有0和1值的新dataframe列[duplicate]

佘飞鸣
2023-03-14

我有一个数据框如下所示

df = 
                     value
2014-05-21 10:00:00    0.0
2014-05-21 11:00:00    3.4
2014-05-21 12:00:00    nan
2014-05-21 13:00:00    0.0
2014-05-21 14:00:00    nan
2014-05-21 15:00:00    1.0
..............

我想增加两列,

第一个名为“活动”的开关将值切换为1(如果为df.value

df_new = 
                     value   active  unactive
2014-05-21 10:00:00    0.0        1         0
2014-05-21 11:00:00    3.4        1         0
2014-05-21 12:00:00    nan        0        -1
2014-05-21 13:00:00    0.0        1         0
2014-05-21 14:00:00    nan        0        -1
2014-05-21 15:00:00    1.0        1         0
............

我尝试使用for循环,但当时间序列很长时,它会占用太多时间。有人知道更好的方法吗?谢谢你的进步!

共有2个答案

曾航
2023-03-14
df['active'] = df['value'].notnull().astype(int)

以及:

df['unactive'] = -df['value'].isnull().astype(int)

(你也没有指定什么'active'应该当df.value

陆俊迈
2023-03-14

您可以使用df.value

In [44]: df['active'], df['inactive'] = (df.value >= 0).astype(int), -(~(df.value >= 0)).astype(int)

In [45]: df
Out[45]:
                     value  active  inactive
2014-05-21 10:00:00    0.0       1         0
           11:00:00    3.4       1         0
           12:00:00    NaN       0        -1
           13:00:00    0.0       1         0
           14:00:00    NaN       0        -1
           15:00:00    1.0       1         0

 类似资料:
  • 我想根据列_1和列_2或列_3中的值创建一个新列“column_new”。如果列_1=='C',则列_new的值与列_2相同,但如果列_1=='G',则列_new的值与列_3相同。 我试过: 错误:值错误:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。 还尝试: 错误:值错误:数据帧的真值不明确。使用a.empty、a.bool()、a.

  • 我有一个包含1.6x10^8记录的data.table,我想根据值为1的指示器列名称创建一个新的字符列。 例如 我希望它尽可能的健壮和干净,并且只依赖于data.table语法和/或其他有用的包/函数(例如dcast);我想避免创建大量的用户定义函数,因为考虑到我的数据表的大小,运行这个函数需要非常长的时间。 我已经查看了其他帖子,但我无法找到与我的情况和所需输出相似的东西。 任何帮助将不胜感激。

  • 谈到R编码,我目前有点墨守成规。我一直在尝试使用mutate、seq和rep函数来生成一个新列,该列迭代多个列值和不同的条件,但结果并不正确。下面是我的一些数据片段: 我希望按类型和特征 ID 对 lipidName 进行分组,然后查看类型特征 ID2,而不是不正确的数据表。如果它们具有相同的类型和特征 ID,则将它们计为脂质名称的相同脂质。如果它们具有相同的类型和特征ID2,则将它们计为脂质名称

  • 我有一个2010年和2019年的土地覆盖类型的数据框架。Pland代表总的土地覆盖价值,1等于该特定区域相对于ID的100%。这些计算是事先进行的,id代表每个几何形状。 我想执行一个函数,该函数生成另一个具有以下描述性名称的列,其中表示要替换的名称: 可复制代码:

  • 我需要根据两个现有列的值添加一个新列。 我的数据集看起来像这样: 新列V3应遵循以下条件: ''' ''' 但是,当我尝试创建列时,我收到以下错误:“”评估错误:比较(1)仅适用于原子类型和列表类型。 理想情况下,结果应该是这样的: 非常感谢!

  • 给定一个大小为N的非负整数的未排序数组,找到一个与给定数S相加的连续子数组。 输入: 输入的第一行包含一个整数T,表示测试用例的数量。接下来是T测试用例。每个测试用例由两行组成。每个测试用例的第一行是N和S,其中N是数组的大小,S是和。每个测试用例的第二行包含N个表示数组元素的空格分隔整数。 输出: 对于每个测试用例,在新行中,如果sum等于子数组,则从左侧打印第一个出现子数组的开始和结束位置(1