2017-10-26 4 views
0

Iは各要素が42,000行のデータフレームであり、100要素辞書は、値が閾値以上であるか否かをチェックもサイクルへの道を設定しようとしていサイクリング

行データを上書きしないようにデータを保存する方法に問題があります。
私は私がやりたいものの単純な例作った:私は、各要素がデータフレーム ここで私は、すべてのデータフレームの各行を順番にしたい3つの要素辞書(my_dic)を持っているし、かどうかを確認

をいずれかの列が閾値数を超えています。 私は.any()と.whereを使用しようとしていますが、各dfのデータを個別に取り込む方法はわかりません。

私は、しきい値を上回る各列にブール値を持つ3つの別々の新しいdfを使いたいと思います。

助けがあれば助かります。

d1 = np.random.rand(3,3) 
d2 = np.random.rand(3,3) 
d3 = np.random.rand(3,3) 

df1 =pd.DataFrame(d1, index=['a', 'b', 'c']) 
df2 =pd.DataFrame(d2, index=['a', 'b', 'c']) 
df3 =pd.DataFrame(d3, index=['a', 'b', 'c']) 

my_dic = {} 
my_dic['a'] = df1 
my_dic['b'] = df2 
my_dic['c'] = df3 

threshold = 0.5 

私はmy_dic内の各キーのすべての行を巡回したいし、これは私が苦しんでいますポイントであるしきい値数

for k in my_dic: 
    print k 
    data = my_dic[k] 
    for row in range(len(data)): 
     print row 
     np.where(data.iloc[row,:] > threshold) 

よりも大きい場合はブールに値を変更しますこのデータを上書きせずにこのデータを保持する方法がわからない

+0

あなたの記事で叫ばないでください。 –

+0

また、しきい値を上回る要素がない列がある場合でも、それはまだ表示されますか? –

+0

申し訳ありませんが、私は私が叫んでいたことを認識していませんでした。私が叫んでいるかどうかはどうすれば分かりますか? – Emma

答えて

1

ブール値のマスクが必要な場合は、dict comprhensionを探しているとします。

result = {k : v > threshold for k, v in my_dic.items()} 
for v in result.values(): 
    print(v, '\n') 

     0  1  2 
a False False False 
b True False True 
c False True True 

     0  1  2 
a False True True 
b True True True 
c False True True 

     0  1  2 
a False False False 
b False False False 
c True True False 

あなたは0/1として結果をしたい場合は、astypeを使用します。

result = {k : v.gt(threshold).astype(int) for k, v in my_dic.items()} 
+0

これは完全に動作します。ありがとうヒープ – Emma

+0

@エマご参考までに。投票を忘れずに回答を受け入れてください(答えの横にある灰色のチェックをクリックすると緑色に切り替わります)。 –

関連する問題