Ich habe folgende Daten:

    production_type       type_a       type_b     type_c     type_d     
0             type_a     1.173783    0.714846    0.583621        1
1             type_b     1.418876    0.864110    0.705485        1
2             type_c     1.560452    0.950331    0.775878        1
3             type_d     1.750531    1.066091    0.870388        1
4             type_a     1.797883    1.094929    0.893932        1
5             type_a     1.461784    0.890241    0.726819        1
6             type_b     0.941938    0.573650    0.468344        1
7             type_a     0.507370    0.308994    0.252271        1
8             type_c     0.443565    0.270136    0.220547        1
9             type_d     0.426232    0.259579    0.211928        1
10            type_d     0.425379    0.259060    0.211504        1

Ich möchte eine neue Spalte, Liste oder Serie erstellen, die den Wert der Spalte zurückgibt.

AUSGABE

    production_type       type_a       type_b     type_c     type_d     Results 
0             type_a     1.173783    0.714846    0.583621        1     1.173783    
1             type_b     1.418876    0.864110    0.705485        1     0.864110    
2             type_c     1.560452    0.950331    0.775878        1     0.775878        
3             type_d     1.750531    1.066091    0.870388        1     1
4             type_a     1.797883    1.094929    0.893932        1     1.797883
5             type_a     1.461784    0.890241    0.726819        1     1.461784
6             type_b     0.941938    0.573650    0.468344        1     0.573650

Grundsätzlich möchte ich, wenn sein Typ_a in der Spalte [Produktionstyp] geschrieben ist, die Ergebnisse von Typ_a in einer Spalte [Ergebnisse] zurückgeben.

Ich habe folgendes versucht:

for i in df:
    if i == 'type_a':
        print ('type_a')
    elif i == 'type_b':
        print ('type_b')
    elif i == 'type_c':
        print ('type_c')
    elif i == 'type_d':
        print ('type_d')
    else:
        print('')  
    print('')   

Using result.append

Verwenden Sie zum Generieren des Datenrahmens Folgendes:

list_cols = ['type_a','type_b','type_c']
df = pd.DataFrame(np.random.rand(10, 3), columns = list_cols )
df['production_type']= ['type_a','type_b','type_c','type_d','type_a','type_a','type_b'
                       ,'type_b','type_c','type_d']
 df['type_d'] = 1
 df['results'] = ''

Irgendwelche Hinweise, wo man suchen soll?

2
Joe 18 Apr. 2018 im 11:58

3 Antworten

Beste Antwort

Sie können pd.DataFrame.apply dafür verwenden:

df['Results'] = df.apply(lambda row: row.get(row['production_type']), axis=1)

Erklärung:

  • pd.DataFrame.apply mit axis=1 wendet eine Funktion auf jede Zeile an und extrahiert über eine implizite Schleife die Komponenten jeder Zeile.
  • Die Methode erlaubt eine anonyme lambda Funktion als Argument.
  • Wir können die Funktion lambda definieren, um den erforderlichen Wert aus der Spalte production_type zu extrahieren.
2
jpp 18 Apr. 2018 im 09:19

Du kannst es versuchen

result = list()
index =0
for i in df['production_type']:
    value = df[i][index]
    index = index+1
    result.append(value)

df['Results'] = pd.DataFrame(result)
1
prabhakar 18 Apr. 2018 im 09:29

Sie können die Methode map verwenden, indem Sie eine lambda -Funktion übergeben.

df['Results'] = df.index.map(lambda index : df[df['production_type'][index]][index])
1
Mihai Alexandru-Ionut 18 Apr. 2018 im 09:38