2017-05-10 23 views
1

関数を要素ごとにpandasデータフレームに適用し、列方向の計算値(例:列の分位数)を渡すにはどうすればよいですか?たとえば、値がカラムの80パーセンタイルよりも低いデータフレームのすべての要素を(ナノ単位で)置き換えたいのですか?すべて列を事前Python Pandas Dataframeは、閾値以下の値を置き換えます。

+1

'私はすべての列のソリューションを探していました' df.quantile' – Kris

答えて

4

使用DataFrame.mask

df = df.mask(df < df.quantile()) 
print (df) 
    a b c 
0 NaN 7.0 NaN 
1 NaN NaN 6.0 
2 NaN NaN 5.0 
3 8.0 NaN NaN 
4 7.0 3.0 5.0 
5 6.0 7.0 NaN 
6 NaN NaN NaN 
7 8.0 4.0 NaN 
8 NaN NaN 6.0 
9 7.0 7.0 6.0 
+0

ありがとう、完璧に働いています。 –

+0

はい、この機能は必要なものです。 – jezrael

+1

@MaxU - あなたは絶対に正しいです、答えは編集されました。 – jezrael

2
In [139]: df 
Out[139]: 
    a b c 
0 1 7 3 
1 1 2 6 
2 3 0 5 
3 8 2 1 
4 7 3 5 
5 6 7 2 
6 0 2 1 
7 8 4 1 
8 5 0 6 
9 7 7 6 

AttributeError: ("'float' object has no attribute 'quantile' ありがとう:

In [145]: df.apply(lambda x: np.where(x < x.quantile(),np.nan,x)) 
Out[145]: 
    a b c 
0 NaN 7.0 NaN 
1 NaN NaN 6.0 
2 NaN NaN 5.0 
3 8.0 NaN NaN 
4 7.0 3.0 5.0 
5 6.0 7.0 NaN 
6 NaN NaN NaN 
7 8.0 4.0 NaN 
8 NaN NaN 6.0 
9 7.0 7.0 6.0 
だけ個別にそれぞれの値にアクセスすることを可能にすると、当然のことながらスロー

def _deletevalues(x, quantile): 
if x < quantile: 
    return np.nan 
else: 
    return x 

df.applymap(lambda x: _deletevalues(x, x.quantile(0.8))) 

をapplymap使い方

または

In [149]: df[df < df.quantile()] = np.nan 

In [150]: df 
Out[150]: 
    a b c 
0 NaN 7.0 NaN 
1 NaN NaN 6.0 
2 NaN NaN 5.0 
3 8.0 NaN NaN 
4 7.0 3.0 5.0 
5 6.0 7.0 NaN 
6 NaN NaN NaN 
7 8.0 4.0 NaN 
8 NaN NaN 6.0 
9 7.0 7.0 6.0 
+0

おかげによってx.quantile'を交換するには...魅力のように働きました。 –

関連する問題