Como adicionar ou combinar duas colunas em um outro em uma trama de dados de se cumprirem uma condição

Mohammed Abulqassim:

Eu sou novo para isso, então isso pode soar estranho, mas basicamente, eu tenho uma grande trama de dados, mas para fins de simplificação vamos supor que a trama de dados é a seguinte:

import pandas as pd
import numpy as np

dfn = pd.DataFrame({'a':[1,2,3,4,5],
                   'b':[6,7,8,9,10],
                   'c':np.nan})
dfn

Resultado:

    a   b   c
0   1   6   NaN
1   2   7   NaN
2   3   8   NaN
3   4   9   NaN
4   5   10  NaN

O que eu quero fazer é preencher valores na coluna 'c' baseado fora de uma condição, ou seja, se o valor de linha correspondente no 'a' é ímpar, então adicioná-lo ao valor de linha correspondente 'b' e entrada em ' c', do contrário, basta usar o 'a' valor para 'c'.

O que eu tenho atualmente é esta:

for row in range(dfn.shape[0]):
    if dfn.loc[row]['a']%2!=0:
        dfn.loc[row]['c']=dfn.loc[row]['a']+dfn.loc[row]['b']
    else:
        dfn.loc[row]['c']=dfn.loc[row]['a']

dfn

Resultado:

    a   b   c
0   1   6   NaN
1   2   7   NaN
2   3   8   NaN
3   4   9   NaN
4   5   10  NaN

Nada parece acontecer aqui e eu não sou inteiramente certo porque.

Eu também tentei uma abordagem diferente de:

is_odd=dfn[dfn['a']%2!=0]
is_odd['c'] = is_odd['a'] + is+odd['b']

is_odd

Aqui, estranhamente eu recebo a saída direita:

    a   b   c
0   1   1   2
2   3   3   6
4   5   5   10

Mas quando eu chamo dfn novamente, ele sai com todos os valores NaN.

Eu também tentei fazê-lo sem o uso de um nome de variável e nada acontece.

Qualquer idéia do que estou em falta ou se há uma maneira de fazer isso?

Obrigado!

sammywemmy:

Use numpy onde , que trabalha para condicionais. É semelhante a uma declaração se em python, mas significativamente mais rápido. i raramente usam iterrows, desde que eu não encontrá-lo tão eficiente quanto numpy onde.

 dfn['c'] = np.where(dfn['a']%2 !=0, 
                     dfn.a + dfn.b,
                     dfn.a)


    a   b   c
0   1   6   7
1   2   7   2
2   3   8   11
3   4   9   4
4   5   10  15

Basicamente, a primeira linha em np.where define ur condição, que neste caso é descobrir se a coluna de 'a' é um número impar. Se for, a próxima linha é executada. se é um número par, em seguida, a última linha é executada. você pode pensar nisso como uma declaração if-else.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=279796&siteId=1
Recomendado
Clasificación