2017-04-12 4 views
1

dfは、完全に浮動小数点数で構成されるPandasデータフレームであるとします。どの関数fに対してdf.apply(f)はすべての負の値をゼロに変換しますか?


私は

df[df < 0] = 0 

がゼロでdf内のすべての負の値を置き換えますが、私は別の何かを求めていることを知っています。私は、結果のデータフレームがdfは負の数を持っている場所でゼロを有するように表現

df.apply(f) 

...で使用する必要がありますどのような機能f知りたいです。


FWIW、エラーで失敗しました次:

df.apply(lambda x: max(x, 0)) 

...と、間違った結果生成以下:1をどうするか、より一般的に

df.apply(lambda x: numpy.max(x, 0)) 

非ベクトル化を適用し、スカラーを返す関数をに適用するデータフレームのyセルと同じ形状の新しいデータフレームを作成します。

答えて

4

適用されない、applymapが必要です。

df = pd.DataFrame(np.random.randn(4, 2)) 

df 
Out: 
      0   1 
0 1.157994 -0.729533 
1 -1.062847 1.119744 
2 -0.424534 -0.058468 
3 0.465355 -0.838637 

df.applymap(lambda x: max(x, 0)) 

Out: 
      0   1 
0 1.157994 0.000000 
1 0.000000 1.119744 
2 0.000000 0.000000 
3 0.465355 0.000000 
0

NB:を、私はそれが最終的には、より一般的に有用見つけるので、私はアイハン答えを受け入れたが、以下の答えは、厳密に言えば、実際にどのような私に近いです求めた)


import numpy as np 

lambda x: np.maximum(x, 0) 

NB:np.maximumnp.maxと混同しないでください。

など。

import pandas as pd 

df = pd.DataFrame(np.random.randn(4, 2)) 

df 
#   0   1 
# 0 0.065962 -0.146952 
# 1 0.248722 0.529046 
# 2 -1.027380 0.632114 
# 3 0.928840 -0.188312 

df.apply(lambda x: np.maximum(x, 0)) 
#   0   1 
# 0 0.065962 0.000000 
# 1 0.248722 0.529046 
# 2 0.000000 0.632114 
# 3 0.928840 0.000000 
関連する問題