根据给定的系列创建具有 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 >= 0
和astype(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 中的最新日期创建具有过滤值的新视图的最佳方法是啥?