私はすべての0と1の列を持つpandasデータフレームで作業しており、それぞれの値を切り替えようとしています(つまり、0はすべて1になり、1はすべて0になります)。これを行う簡単な方法はありますか?パンダのデータフレームで0と1の値を入れ替える方法は?
3
A
答えて
3
使用replace
:
df = df.replace({0:1, 1:0})
またはより高速numpy.logical_xor
:
df = np.logical_xor(df,1).astype(int)
以上の高速化:
df = pd.DataFrame(np.logical_xor(df.values,1).astype(int),columns=df.columns, index=df.index)
サンプル:
np.random.seed(12)
df = pd.DataFrame(np.random.choice([0,1], size=[10,3]))
print (df)
0 1 2
0 1 1 0
1 1 1 0
2 1 1 0
3 0 0 1
4 0 1 1
5 1 0 1
6 0 0 0
7 1 0 0
8 1 0 1
9 1 0 0
df = df.replace({0:1, 1:0})
print (df)
0 1 2
0 0 0 1
1 0 0 1
2 0 0 1
3 1 1 0
4 1 0 0
5 0 1 0
6 1 1 1
7 0 1 1
8 0 1 0
9 0 1 1
別の解決策:
df = (~df.astype(bool)).astype(int)
print (df)
0 1 2
0 0 0 1
1 0 0 1
2 0 0 1
3 1 1 0
4 1 0 0
5 0 1 0
6 1 1 1
7 0 1 1
8 0 1 0
9 0 1 1
タイミング:
np.random.seed(12)
df = pd.DataFrame(np.random.choice([0,1], size=[10000,10000]))
print (df)
In [69]: %timeit (np.logical_xor(df,1).astype(int))
1 loop, best of 3: 1.42 s per loop
In [70]: %timeit (df^1)
1 loop, best of 3: 2.53 s per loop
In [71]: %timeit ((~df.astype(bool)).astype(int))
1 loop, best of 3: 1.81 s per loop
In [72]: %timeit (df.replace({0:1, 1:0}))
1 loop, best of 3: 5.08 s per loop
In [73]: %timeit pd.DataFrame(np.logical_xor(df.values,1).astype(int), columns=df.columns, index=df.index)
1 loop, best of 3: 350 ms per loop
編集: これは速くする必要があります:
import numexpr as ne
arr = df.values
df = pd.DataFrame(ne.evaluate('1 - arr'),columns=df.columns, index=df.index)
2
あなたのデータフレームのみの1の0を構成されている場合、あなたはXOR演算子を使用できますdf^1
In [19]: import pandas as pd
In [20]: df = pd.DataFrame({"a": [1,0,1], "b": [0,1,1]})
In [21]: df
Out[21]:
a b
0 1 0
1 0 1
2 1 1
In [22]: df^1
Out[22]:
a b
0 0 1
1 1 0
2 0 0
2
一つの簡単な方法は次のようになります - パフォーマンスのために
df[:] = 1-df.values
を、私たちはそうのような修正版のために、基本となる配列データで作業することをお勧めします -
a = df.values
a[:] = 1-a
サンプル実行 -
In [43]: df
Out[43]:
0 1 2
0 0 0 1
1 0 0 1
2 0 0 1
3 1 1 0
4 1 0 0
In [44]: df[:] = 1-df.values
In [45]: df
Out[45]:
0 1 2
0 1 1 0
1 1 1 0
2 1 1 0
3 0 0 1
4 0 1 1
@jezrael's timings setup
を最良のゾル
In [46]: np.random.seed(12)
...: df = pd.DataFrame(np.random.choice([0,1], size=[10000,10000]))
...:
# Proposed in this post
In [47]: def swap_0_1(df):
...: a = df.values
...: a[:] = 1-a
...:
In [48]: %timeit pd.DataFrame(np.logical_xor(df.values,1).astype(int), columns=df.columns, index=df.index)
10 loops, best of 3: 218 ms per loop
In [49]: %timeit swap_0_1(df)
10 loops, best of 3: 198 ms per loop
、あるいは入力配列データのブールバージョンの否定を使用することをお勧め - - この記事で提案する1との比較のためにその設定からutionあなたは一度であること
In [60]: def swap_0_1_bool(df):
...: a = df.values
...: a[:] = ~a.astype(bool)
...:
In [63]: %timeit swap_0_1_bool(df)
10 loops, best of 3: 179 ms per loop
+1
'a [:] = np.logical_not(a)'を試してみてください。これは 'astype'の再割り当てを必要としません –
関連する問題
- 1. 1と0の間でstd_logicを切り替える方法
- 2. パンダでデータフレームの行を並べ替え
- 3. パンダのデータフレームを並べ替える
- 4. データフレームを列の値で並べ替える方法は?
- 5. javascriptの値1と0を切り替える
- 6. ドロップダウンの値を入れ替える方法は?
- 7. パンダのデータフレームで選択した列の値を置き換える方法は?
- 8. パンダのデータフレーム千鳥0の
- 9. パンダのデータフレームを系列で並べ替える
- 10. パンダのデータフレームの負の数値をゼロで置き換える方法
- 11. 列の値を変更してパンダで並べ替える方法は?
- 12. jqを使ってオブジェクトのキーと値を入れ替える方法は?
- 13. パンダのデータフレームの展開と並べ替え
- 14. `` matrix [:、mask] `を` `matrix [mask、:]`に `0`と` 1`だけを使って入れ替える?
- 15. 2列間で値を入れ替える方法
- 16. 0111をPHPで0 + 1 + 1 + 1 = 3と数える方法
- 17. パンダのデータフレームの列を並べ替える
- 18. パンダはリサンプリングとデータフレームを考えるコラム
- 19. 入れ替えるキーと値
- 20. パンダのデータフレームでyes/noの列を1/0に変更する簡単な方法はありますか?
- 21. Python:パンダのデータフレームで繰り返されるカップルの値の数を数える方法は?
- 22. assignemntの値を入れ替える
- 23. データフレーム内の各値を0または1にマップする方法
- 24. パンダのデータフレームをループする方法は?
- 25. WPF Toolkitの線グラフで軸を入れ替える方法は?
- 26. 0/1の値を入れ替えた行は、その行に複数の1の値がある場合の対応する列名です。
- 27. パンダのデータフレーム:マシンラーニングなしで値ごとにグループをクラスタリングする方法は?
- 28. パンダ:最大値で並べ替え列
- 29. パンダは、次のデータフレームを考えるグループバリュー
- 30. パンダは、次のデータフレームを考えるグループ
を行うことができます?それは葛藤を作り出すのではないのですか?アルゴリズムがどのように機能するのだろうか?並行して?元のdfのビューを作成しますか? –
@DiegoAgher - はい、1つは完璧に動作します。私は紛争はないと思う。そしてそれがどう動くかは、私にとっては難しい質問です... – jezrael