考虑以下示例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
由于
答案 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