Para filtrar um dataframe (df) por uma única coluna, se considerarmos dados com homens e mulheres, podemos:
males = df[df[Gender]=='Male']
Pergunta 1 - Mas e se os dados abrangessem vários anos e eu quisesse ver apenas homens em 2014?
Em outras línguas, posso fazer algo como:
if A = "Male" and if B = "2014" then
(exceto que quero fazer isso e obter um subconjunto do dataframe original em um novo objeto dataframe)
Questão 2. Como faço isso em um loop e criar um objeto dataframe para cada conjunto exclusivo de ano e gênero (ou seja, um df para: 2013-Masculino, 2013-Feminino, 2014-Masculino e 2014-Feminino
for y in year:
for g in gender:
df = .....
groupby
.Respostas:
Usando o
&
operador, não se esqueça de envolver as subinstruções com()
:Para armazenar seus dataframes em um
dict
loop for:EDITAR:
Uma demonstração para o seu
getDF
:fonte
key
no seugetDF
? um único parâmetro ou uma tupla de chaves? seja específico, por favor;)Gender
eYear
devem ser strings, ou seja,'Gender'
e'Year'
.Para funções booleanas mais gerais que você gostaria de usar como filtro e que dependem de mais de uma coluna, você pode usar:
onde f é uma função que é aplicada a cada par de elementos (x1, x2) de col_1 e col_2 e retorna True ou False dependendo de qualquer condição que você deseja em (x1, x2).
fonte
Comece com pandas 0,13 , esta é a maneira mais eficiente.
fonte
Caso alguém se pergunte qual é a maneira mais rápida de filtrar (a resposta aceita ou a de @redreamality):
Resultados para 100.000 linhas:
Resultados para 10.000.000 linhas:
Portanto, os resultados dependem do tamanho e dos dados. No meu laptop,
query()
fica mais rápido depois de 500 mil linhas. Além disso, a pesquisa de string emYear=="2014"
tem uma sobrecarga desnecessária (Year==2014
é mais rápida).fonte
Você pode criar sua própria função de filtro usando
query
empandas
. Aqui você tem a filtragem dedf
resultados por todos oskwargs
parâmetros. Não se esqueça de adicionar alguns validadores (kwargs
filtragem) para obter a função de filtro para vocêdf
.fonte
Você pode filtrar por várias colunas (mais de duas) usando o
np.logical_and
operador para substituir&
(ounp.logical_or
substituir|
)Aqui está um exemplo de função que faz o trabalho, se você fornecer valores de destino para vários campos. Você pode adaptá-lo para diferentes tipos de filtragem e outros enfeites:
Uso:
fonte