2
respostas

Column(s) Valor already selected

dfNova = dfResidencial.groupby('Tipo')['Valor']
df_new = pd.DataFrame()
for tipo in dfNova.groups.keys():
    tipoCerto = dfNova['Tipo'] == tipo
    limiteCerto = (dfNova['Valor'] >= limite_inferior[tipo]) & (dfNova['Valor'] <= limite_superior[tipo])
    selecao = tipoCerto & limiteCerto
    dfNovaFim = dfnova[selecao]
    df_new = pd.concat([df_new,dfNovaFim])
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-109-b77a31dcbabc> in <module>
      1 df_new = pd.DataFrame()
      2 for tipo in dfNova.groups.keys():
----> 3     tipoCerto = dfNova['Tipo'] == tipo
      4     limiteCerto = (dfNova['Valor'] >= limite_inferior[tipo]) & (dfNova['Valor'] <= limite_superior[tipo])
      5     selecao = tipoCerto & limiteCerto

~\anaconda3\lib\site-packages\pandas\core\base.py in __getitem__(self, key)
    211     def __getitem__(self, key):
    212         if self._selection is not None:
--> 213             raise IndexError(f"Column(s) {self._selection} already selected")
    214 
    215         if isinstance(key, (list, tuple, ABCSeries, ABCIndexClass, np.ndarray)):

IndexError: Column(s) Valor already selected
2 respostas

Olá Eduardo! Tudo jóia?

Quando você faz:

tipoCerto = dfNova['Tipo'] == tipo

Você está tentando acessar uma coluna "Tipo" que não existe na sua Series dfNova. Essa coluna encontra-se nos seus dados originais (dfResidencial, no seu caso). Sendo assim, o correto seria fazer tipoCerto = dfResidencial['Tipo'] == tipo. E o mesmo vale pro restante do código que se encontra dentro desse laço for, portanto, seu código ficaria asssim:

dfNova = dfResidencial.groupby('Tipo')['Valor']
df_new = pd.DataFrame()
for tipo in dfNova.groups.keys():
    tipoCerto = dfResidencial['Tipo'] == tipo
    limiteCerto = (dfResidencial['Valor'] >= limite_inferior[tipo]) & (dfResidencial['Valor'] <= limite_superior[tipo])
    selecao = tipoCerto & limiteCerto
    dfNovaFim = dfResidencial[selecao]
    df_new = pd.concat([df_new,dfNovaFim])

Espero que isso te ajude! Qualquer dúvida estamos a disposição :)

Bons estudos!

Oi Milena,

Muito obrigado, agora foi!