2017-06-20 115 views
2

我有一个熊猫数据框,其中所有列的值都在-1和1之间。我希望将这些值转换为0或1,具体取决于原始值是正值还是负值。转换数据帧值

有没有一种方法可以应用这种转换,还是必须通过迭代手工完成?

2014-02-19 -0.005585 2.273724 1.622362 2.971364 1.980529 
2014-02-20 0.005761 0.139337 0.129309 0.007561 0.086854 
2014-02-21 -0.001857 -0.868622 -0.555042 -0.591182 -0.488545 
2014-02-24 0.006428 0.120364 0.217812 0.117301 0.358756 
2014-02-25 -0.001697 0.032631 0.220509 -0.154151 0.592626 

应该

2014-02-19 0 1 1 1 1 
2014-02-20 1 1 1 1 1 
2014-02-21 0 0 0 0 0 
2014-02-24 1 1 1 1 1 
2014-02-25 0 1 1 0 1 

回答

3

假设日期列是索引:

(df > 0).astype('int') 
Out: 
      1 2 3 4 5 
2014-02-19 0 1 1 1 1 
2014-02-20 1 1 1 1 1 
2014-02-21 0 0 0 0 0 
2014-02-24 1 1 1 1 1 
2014-02-25 0 1 1 0 1 

如果没有索引,你可以用df = df.set_index('Date')其中日期是名称设置该列。

+1

工作是否完成,谢谢:) – kjanko

+1

这是合适的答案:-) – piRSquared

2

为了简洁...

(df > 0) * 1 

对于速度...
numpy@ayhan's answer

pd.DataFrame(
    (df.values > 0).astype(int), 
    df.index, df.columns 
) 

-fied版本都得到

  1 2 3 4 5 
2014-02-19 0 1 1 1 1 
2014-02-20 1 1 1 1 1 
2014-02-21 0 0 0 0 0 
2014-02-24 1 1 1 1 1 
2014-02-25 0 1 1 0 1