Utilizați o listă de valori pentru a selecta rânduri dintr-un cadru de date pandas (Programare, Python, Pandas, Dataframe)

zach a intrebat.

Să spunem că am următorul dataframe pandas:

df = DataFrame({'A' : [5,6,3,4], 'B' : [1,2,3, 5]})
df

     A   B
0    5   1
1    6   2
2    3   3
3    4   5

Pot să fac o subset pe baza unei anumite valori:

x = df[df['A'] == 3]
x

     A   B
2    3   3

Dar cum pot face subset pe baza unei liste de valori? – ceva de genul acesta:

list_of_values = [3,6]

y = df[df['A'] in list_of_values]

1 răspunsuri
Wouter Overmeire

Puteți utiliza isin metoda:

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

In [2]: df
Out[2]:
   A  B
0  5  1
1  6  2
2  3  3
3  4  5

In [3]: df[df['A'].isin([3, 6])]
Out[3]:
   A  B
1  6  2
2  3  3

Și pentru a obține opusul folosiți ~:

In [4]: df[~df['A'].isin([3, 6])]
Out[4]:
   A  B
0  5  1
3  4  5

Comentarii

    21

  • Cum ați putea returna aceste valori în ordinea din listă? De exemplu, list_of_values are valorile 3 apoi 6, dar cadrul este returnat cu 6 apoi 3. Nu mă refer la o simplă sortare, ci mai degrabă cum anume putem returna în ordinea valorilor din listă. –  > Por Jason Strimpel.
  • Acesta a fost un exemplu de indexare booleană care păstrează ordinea în afara indexului, vezi pandas.pydata.org/pandas-docs/stable/… pentru mai multe detalii. Este nevoie de o sortare după selecție. –  > Por Wouter Overmeire.
  • Acest lucru m-a ajutat stackoverflow.com/a/29108799/5629831 –  > Por Philippe Remy.
  • De asemenea, puteți obține rezultate similare folosind ‘query’ și @<lista dvs. de valori>: ex: df = pd.DataFrame({‘A’: [1, 2, 3], ‘B’: [‘a’, ‘b’, ‘f’]}) df = pd. DataFrame({‘A’ : [5,6,3,4], ‘B’ : [1,2,3, 5]}) list_of_values = [3,6] result= df.query(„A in @list_of_values”) result A B 1 6 2 2 2 3 3 –  > Por akuriako.
  • @JasonStrimpel Am răspuns la întrebarea ta aici: stackoverflow.com/questions/51944021/… –  > Por syltruong.