选择带条件的列数据并将其移动到新列

时间:2017-12-01 14:38:09

标签: python pandas

我的数据框如下所示。

T$QOOR
   3
  14
  12
  -6
 -19
   9

我想将正面和负面的内容移动到新的列中。

sls_item['SALES'] = sls_item['T$QOOR'].apply(lambda x: x if x >= 0 else 0)
sls_item['RETURN'] = sls_item['T$QOOR'].apply(lambda x: x*-1 if x < 0 else 0)

结果如下。

T$QOOR    SALES    RETURN    
   3        3         0
  14       14         0
  12       12         0
  -6        0        -6
 -19        0       -19
   9        9         0

除了使用apply之外,还有更好更清洁的方法吗?

2 个答案:

答案 0 :(得分:0)

使用clip_lowerclip_upper-1多个sls_item['SALES'] = sls_item['T$QOOR'].clip_lower(0) sls_item['RETURN'] = sls_item['T$QOOR'].clip_upper(0).mul(-1) print (sls_item) T$QOOR SALES RETURN 0 3 3 0 1 14 14 0 2 12 12 0 3 -6 0 6 4 -19 0 19 5 9 9 0 添加了sls_item['SALES'] = sls_item['T$QOOR'].where(lambda x: x >= 0, 0) sls_item['RETURN'] = sls_item['T$QOOR'].where(lambda x: x < 0, 0) * -1 print (sls_item) T$QOOR SALES RETURN 0 3 3 0 1 14 14 0 2 12 12 0 3 -6 0 6 4 -19 0 19 5 9 9 0

mask = sls_item['T$QOOR'] >=0
sls_item['SALES'] = np.where(mask, sls_item['T$QOOR'], 0)
sls_item['RETURN'] = np.where(~mask, sls_item['T$QOOR'] * -1, 0)
print (sls_item)
   T$QOOR  SALES  RETURN
0       3      3       0
1      14     14       0
2      12     12       0
3      -6      0       6
4     -19      0      19
5       9      9       0

使用mulwhere

{{1}}
{{1}}

答案 1 :(得分:0)

exports.getToken=function(uid,db){ return db.ref(`/Tokens/${uid}`).once('value').then(function(result){ return result.val(); }); }; + assgin

where