Pilih Baris dengan Nilai lebih besar dari V di lebih dari C kolom

Saya memiliki kerangka data panda berikut

Index   A   B   C   D
----------------------
1       2   0   0   10
2       0   3   6   0
3       4   3   2   0
4       3   2   6   3
5       1   1   1   0

Saya ingin menanyakan kerangka data ini untuk memilih semua baris yang memiliki nilai lebih besar dari 1 (V) di kolom lebih besar dari 2 (C).

Dalam hal ini, baris yang dipilih akan menjadi Indeks 3 dan 4 akan dipilih karena memiliki nilai lebih besar dari 1 yang muncul di lebih dari 2 kolom yaitu. Indeks 3 memiliki 4, 3, 2 (semuanya lebih besar dari 1) yang muncul di A, B, C yaitu 3 kolom dan demikian pula, Indeks 4 memiliki nilai 3, 2, 6, 3 (semuanya lebih besar dari 1) yang muncul di A, B, C, dan D yaitu 4 kolom.

Keluaran yang diharapkan

Index   A   B   C   D
----------------------
3       4   3   2   0
4       3   2   6   3

person Afsan Abdulali Gujarati    schedule 27.12.2018    source sumber


Jawaban (1)


Anda dapat membuat topeng berikut untuk memilih baris:

import pandas as pd

data = [[2, 0, 0, 10],
        [0, 3, 6, 0],
        [4, 3, 2, 0],
        [3, 2, 6, 3],
        [1, 1, 1, 0]]

df = pd.DataFrame(data=data, columns=list('ABCD'))
mask = (df.values > 1).sum(axis=1) > 2
print(df[mask])

Keluaran

   A  B  C  D
2  4  3  2  0
3  3  2  6  3

Ide utama pembuatan mask adalah membuat array nilai boolean dengan True berarti nilainya di atas 1, lalu menjumlahkan nilai-nilai tersebut di seluruh baris dan jika jumlahnya di atas 2, berarti ada lebih dari dua nilai di atas 1.

Sebagai alternatif, Anda dapat menggunakan numpy.count_nonzero untuk membuat topeng:

import pandas as pd
import numpy as np

data = [[2, 0, 0, 10],
        [0, 3, 6, 0],
        [4, 3, 2, 0],
        [3, 2, 6, 3],
        [1, 1, 1, 0]]

df = pd.DataFrame(data=data, columns=list('ABCD'))
mask = np.count_nonzero(df.values > 1, axis=1) > 2
print(df[mask])

Keluaran

   A  B  C  D
2  4  3  2  0
3  3  2  6  3
person Dani Mesejo    schedule 27.12.2018