从一组基于值的列中选择一个值,然后使用该值创建新列?

时间:2019-04-19 03:11:04

标签: python pandas 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

,并想根据列“ D”中的条件从“ A”,“ B”或“ C”列中进行选择来插入“ E”行,我该怎么做?例如:如果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 个答案:

答案 0 :(得分:4)

这是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 :(得分:0)

Lookup将在这里工作。以下示例返回integersstrings

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

答案 2 :(得分:0)

我希望这对您有帮助

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的所有字母。这是随机的