私はパンダのデータフレームを持っています。それぞれの列をチェックしたいと思います。値が.92以下になると値は1になります。これを達成するための簡単な方法は?パンダは、特定の値の後に列1のすべての値を作成します。
答えて
はブールデータフレームのデータフレームdf
np.random.seed([3,1415])
df = pd.DataFrame(np.random.rand(10, 10) * 10, columns=list('ABCDEFGHIJ')).round(2)
使用cumprod
を考えてみましょう。そして、私の解決策についてでpd.DataFrame.where
df.where(df.gt(.92).cumprod().astype(bool), 1)
A B C D E F G H I J
0 4.45 4.08 4.6 4.65 4.63 1.0 8.50 8.18 7.78 7.58
1 9.35 8.31 8.8 9.27 7.22 1.0 1.46 2.00 4.38 1.01
2 2.79 6.10 1.0 8.37 7.40 1.0 6.91 3.77 2.25 4.35
3 7.01 7.01 1.0 1.00 7.01 1.0 7.65 2.53 5.48 7.79
4 6.52 1.36 1.0 1.00 2.75 1.0 7.14 7.76 5.42 8.37
5 5.38 1.86 1.0 1.00 3.74 1.0 7.76 1.00 5.04 6.71
6 6.20 3.02 1.0 1.00 3.68 1.0 8.82 1.00 4.96 8.06
7 1.00 4.38 1.0 1.00 1.00 1.0 5.85 1.00 6.39 1.33
8 1.00 8.82 1.0 1.00 1.00 1.0 1.00 1.00 6.06 4.02
9 1.00 6.41 1.0 1.00 1.00 1.0 1.00 1.00 1.09 3.15
何かが私を気にすることを使用します。だから私はasked my own question here.です。これは、リンクされた質問からのアドバイスを考慮して、より良い解決策です。リンクをたどり、質疑応答に感謝の意を表してください。ありがとう。
v = df.values
mask = np.logical_and.accumulate(v > .92, 0)
pd.DataFrame(
np.where(mask, v, 1),
df.index, df.columns
)
A B C D E F G H I J
0 4.45 4.08 4.6 4.65 4.63 1.0 8.50 8.18 7.78 7.58
1 9.35 8.31 8.8 9.27 7.22 1.0 1.46 2.00 4.38 1.01
2 2.79 6.10 1.0 8.37 7.40 1.0 6.91 3.77 2.25 4.35
3 7.01 7.01 1.0 1.00 7.01 1.0 7.65 2.53 5.48 7.79
4 6.52 1.36 1.0 1.00 2.75 1.0 7.14 7.76 5.42 8.37
5 5.38 1.86 1.0 1.00 3.74 1.0 7.76 1.00 5.04 6.71
6 6.20 3.02 1.0 1.00 3.68 1.0 8.82 1.00 4.96 8.06
7 1.00 4.38 1.0 1.00 1.00 1.0 5.85 1.00 6.39 1.33
8 1.00 8.82 1.0 1.00 1.00 1.0 1.00 1.00 6.06 4.02
9 1.00 6.41 1.0 1.00 1.00 1.0 1.00 1.00 1.09 3.15
タイミング
%timeit df.where(df.gt(.92).cumprod().astype(bool), 1)
1000 loops, best of 3: 844 µs per loop
%%timeit
v = df.values
mask = np.logical_and.accumulate(v > .92, 0)
pd.DataFrame(
np.where(mask, v, 1),
df.index, df.columns
)
10000 loops, best of 3: 65.8 µs per loop
以前はdf.gtについて聞いたことがありません。 .gtコールの前に、そのdfの1.00すべてが0.92以下になるでしょうか? – James
@James私はあなたに同じデータフレームを再構築するコードを与えました。あなた自身を見て、見てください。 :-) – piRSquared
ありがとう!私は明日の決勝戦の後にコードで試合を行い、それが私の友人に働くならあなたの答えを受け入れるでしょう! – James
- 1. パンダのデータフレームの特定の値の列名を返します
- 2. パンダのすべての列の値を空白にします
- 3. Pythonのパンダ:列が特定の値
- 4. パンダの特定の列の値をループする方法は?
- 5. Laravelはすべてのユーザーの特定の値に列を更新します
- 6. 2列の値 - > 1列の値+ 1列のラベルのパンダ
- 7. パンダの特定の文字列を数値に変換する
- 8. 1を除くすべての列に値をルックアップし、最後の列から値を返します。
- 9. 他の列の特定の値に対して値を持つ表に1つの列を追加します。
- 10. 特定の列の最後の値を検索します。
- 11. HowTo:特定の列に特定の値があるセル配列のすべての行を選択します。
- 12. 特定の列(パンダ)のNaNが最初に出現した後にすべての行をドロップします
- 13. パンダは列の値を分割して列に戻します
- 14. パンダの値の一意の値に基づいて新しい列を作成します
- 15. パンダ - 列の値に基づいて特定の行の特定の列を移動する
- 16. パンダ:特定の列の値のカウントに基づいて行を選択する
- 17. パンダの列の値を指定する
- 18. 配列キー(数値)を特定の配列(数値)に並べ替えます。
- 19. 列値の後のすべての数値に更新します(最大9)。
- 20. Cloudantは、すべての最後の値を数えるためにビューを作成します。配列フィールド
- 21. 特定の行の特定の列の値に一致するすべての行を選択するには
- 22. 正常に動作し、私は別の列の値に基づいて、パンダのデータフレームの列の値を設定しようとしています列
- 23. String.Splitはすべての空の配列値を作成します
- 24. パンダのデータフレームをループして特定の値を列に表示しようとしています
- 25. テーブルのすべてのレコードの1列の設定値
- 26. は別の列に1つの列値を移動 - パンダ
- 27. パンダread_csv dtype 1以外のすべての列を指定
- 28. パンダを使用してBoxplotの特定の値をマーク
- 29. 1つのテーブルの列からすべての値を別のテーブルの特定の列にコピー
- 30. 特定の列の値は
あなたの質問は不明です。値が0.92以下になると、その列の値を1に変更した後にすべての値を変更したい場合、各列を上から下、列内でチェックすることを意味しますか? –
申し訳ありませんがフレームを書いておく必要がありますが、私は電話をかけていますが、それは痛みです...しかし、基本的に列の値が1.01、.98、.97、.92、.93、.91の場合、 1.01、.98、.97、.92、1、1に変更する列。ありがとう! – James
列にもパターンがありますか?あなたの例では、私は値が降順であることを見ることができますか、それはちょうど偶然です。 –