2017-04-06 8 views
0

私はデータフレームを解析し、特定の基準を満たす値だけをスケールしようとしています。たとえば、私が持っている場合:Pandas DataFrame内の特定のエントリを条件付きでスケーリングしますか?

df = [1,2,3,4] 

と、私は10で2未満のすべての値を拡張したい、私は、次のデータフレーム返すようにしたい:次のように今

df = [10,2,3,4] 

を、私の機能は次のとおりです。

def scaleLessPartColumn(dataFrame, column_name, scale_factor, sort_num): 
    dataFrame.ix[(dataFrame[column_name] < sort_num), column_name] *= scale_factor 
    return dataFrame 

しかし、これは列全体を拡大するものであり、特定のエントリではないと考えています。

助けていただけたら幸いです!ありがとうございました!

+0

をあなたはこれが働いているとは考えていないのはなぜ?あなたの入力と出力のサンプルを表示してください。 –

答えて

0

これは動作します:

dataFrame[dataFrame[column_name] < sort_num] *= scale_factor 

df = pd.DataFrame({"A": [1,2,3,4], "B": [5,2,4,3], "C": [2,2,1,4]}) 

df 
# A B C 
#0 1 5 2 
#1 2 2 2 
#2 3 4 1 
#3 4 3 4 

df[df[["A", "B"]] < 3] *= 10 

df 
# A B C 
#0 10 5 2 
#1 20 20 2 
#2 3 4 1 
#3 4 3 4 

しかし、あなたはこれをより読み見つけるかもしれない:

dataFrame[column_name] = dataFrame[column_name].where(dataFrame[column_name]>=sort_num, 
                 dataFrame[column_name]*scale_factor) 
+0

ありがとうPsidom。私は元のコードも動作していると信じていて、結果を誤解していました。しかし、私は本当に読みやすいコードに感謝しています。乾杯! –

+0

ようこそ。うれしい! – Psidom

関連する問題