【问题标题】:Create new dataframe column with 0 and 1 values according to given series [duplicate]根据给定的系列创建具有 0 和 1 值的新数据框列 [重复]
【发布时间】: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)。

标签: python pandas dataframe boolean 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

【讨论】:

    猜你喜欢
    • 2019-04-04
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2020-11-13
    相关资源
    最近更新 更多