Выберите значение из набора столбцов на основе значения и создайте новый столбец со значением? - PullRequest
4 голосов
/ 19 апреля 2019

, поэтому, если у меня есть панды Dataframe вроде:

   A  B  C  D
0  1  2  3  a 
1  2  4  6  a
2  4  8  8  b
3  2  3  5  c

и хотите вставить строку «E», выбрав один из столбцов «A», «B» или «C» на основе условий в столбце «D», как мне поступить? Например: если D == a, выберите «A», в противном случае выберите «B», выводя:

   A  B  C  D  E
0  1  2  3  a  1
1  2  4  6  a  2
2  4  8  8  b  8
3  2  3  5  c  3

Заранее спасибо!

Ответы [ 3 ]

5 голосов
/ 19 апреля 2019

Это lookup

df.lookup(df.index,df.D.str.upper())
Out[749]: array([1, 2, 8, 5], dtype=int64)

df['E']=df.lookup(df.index,df.D.str.upper())
1 голос
/ 19 апреля 2019

Надеюсь, это поможет

import pandas as pd
import random

data = []
D = ['a','b','c']

for i in range(4):

    new_list = []

    for x in range(3):

        new_list.append(random.randint(0,10))

    new_list.append(random.choice(D))
    data.append(new_list)

df = pd.DataFrame(data, columns = ['A', 'B', 'C', 'D'])

Даст случайные данные

IN[120]:df
Out[120]: 
   A   B  C  D
0  1  10  8  a
1  4   9  7  a
2  4  10  6  b
3  5  10  4  b

Затем, чтобы добавить 'E', выберите одну из букв из D.


choice = random.choice(list(df['D'])).upper()


E = list(df[choice])

df['E'] = E

Возвращает

IN[122]:df
Out[122]: 
   A   B  C  D  E
0  1  10  8  a  1
1  4   9  7  a  4
2  4  10  6  b  4
3  5  10  4  b  5

Вы фиксируете данные в D так, чтобы они включали в себя все буквы от a до c.Это было случайно

1 голос
/ 19 апреля 2019

Lookup будет работать здесь. Следующие примеры возвращают integers и strings.

import pandas as pd

d = ({
    'A' : ['x','y','z','x'],
    'B' : ['j','k','l','m'],
    'C' : ['n','o','p','q'],
    'D' : ['A','C','B','A'],
    }) 

df = pd.DataFrame(d)

df = df.assign(E=df.lookup(df.index, df.D.map('{}'.format)))
print(df)

   A  B  C  D  E
0  x  j  n  A  x
1  y  k  o  C  o
2  z  l  p  B  l
3  x  m  q  A  x

Аналогично для integer

import pandas as pd

d = ({
    'A' : [1,2,3,4],
    'B' : [4,3,2,1],
    'C' : [5,6,7,8],
    'D' : ['A','C','B','A'],
    }) 

df = pd.DataFrame(d)

df = df.assign(E=df.lookup(df.index, df.D.map('{}'.format)))
print(df)

   A  B  C  D  E
0  1  4  5  A  1
1  2  3  6  C  6
2  3  2  7  B  2
3  4  1  8  A  4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...