根据给定的系列创建具有 0 和 1 值的新数据框列 [重复]

Posted

技术标签:

【中文标题】根据给定的系列创建具有 0 和 1 值的新数据框列 [重复]【英文标题】:Create new dataframe column with 0 and 1 values according to given series [duplicate] 【发布时间】:2018-10-01 15:54:05 【问题描述】:

我有一个如下所示的数据框

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
..............

我想添加两列,

第一个名为“active”将值切换为 1(如果 df.value >=0)和 0(如果 df.value = nan),第二个“unactive”将值切换为 0(如果df.value >=0 ) 和 -1 (如果 df.value = nan),所以新的数据框会像

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循环,但是时间序列很长时会花费太多时间。有谁知道更好的方法吗?感谢您的提前!

【问题讨论】:

所以如果 df.value @smci 好问题,在问题中我没有负数,但实际上我想指出值 (>=0) 等于 (=!nan)。 【参考方案1】:
df['active'] = df['value'].notnull().astype(int)

和:

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

(另外,当 df.value

【讨论】:

@smci 输出不是 OP 实际要求的(顺便说一下,我不是反对者) @RafaelC 现在实际上是。同样,cmets 应该是建设性的。转换为 int 很简单。困难的部分是表达。 notnull==~isnull.... 当您有一个引发错误的不正确答案时,您是否真的在争论语义,而不是拒绝投票,用户花时间解释为什么它会返回错误? 这是你提到的一个有趣的部分......实际上我想创建新列“unactve”并将值切换为 0(如果 df.value >=0)和 -1(如果 df .value = nan),怎么写?【参考方案2】:

你可以使用df.value >= 0astype(int)

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

【讨论】:

以上是关于根据给定的系列创建具有 0 和 1 值的新数据框列 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 pyspark 数据框列上拟合内核密度估计并将其用于创建具有估计的新列

如何匹配和合并两个具有完全不同值的数据框,数据框列中的数字除外?

根据 SQL Server 中的最新日期创建具有过滤值的新视图的最佳方法是啥?

Pyspark/SQL 将具有列表值的列连接到另一个数据框列

从数据框列中的字符串值中删除字符

迭代数据框并根据一列的值在具有前一行值的新列中执行操作