根据条件更改pandas数据帧的所有值?

时间:2018-03-26 16:34:25

标签: pandas

考虑以下示例pandas dataframe,

     col1  col2 col3
0     1     3    9
1     2     4    0

如何在不使用for循环的情况下将所有大于0.5的值转换为1?在这个玩具示例中,结果数据框应为

     col1  col2 col3
0     1     1    1
1     1     1    0

由于

3 个答案:

答案 0 :(得分:2)

IIUC mask

df=df.mask(df>0.5,1)
df
Out[605]: 
   col1  col2  col3
0     1     1     1
1     1     1     0

答案 1 :(得分:2)

或者:

(df>.5).mul(1)

输出:

  col1 col2 col3
0    1    1    1
1    1    1    0

更快:

pd.DataFrame((df.values>.5), index=df.index, columns=df.columns, dtype=np.int)

计时

%timeit df.mask(df>0.5,1)
  

100个循环,最佳3:每循环2.26 ms

%timeit (df>.5).mul(1)
  

1000个循环,最佳3:每循环1.03毫秒

%timeit pd.DataFrame((df.values>.5), index=df.index, columns=df.columns, dtype=np.int)
  

10000个循环,最佳3:每循环163μs

答案 2 :(得分:1)

另一种选择:

df = df.applymap(lambda x: 1 if x>0.5 else 0)

输出:

   col1  col2  col3
0     1     1     1
1     1     1     0