Перебирать строки данных и назначать их списку на основе переменной в списке? - PullRequest
0 голосов
/ 01 мая 2019

У меня есть Dataframe, который это -> https://drive.google.com/file/d/1qcQRwmFIkTJHPaknXjV1vNlDScw1Fxf6/view?usp=sharing

 Kyphosis  Age  Number  Start  prob_Age  prob_Number  prob_Start
50   absent   68       5     10  0.993964     0.208729    0.916693
51   absent    9       2     17  0.997321     0.904427    0.047178
52  present  139      10      6  0.004772     0.001366    0.964974
53   absent    2       2     17  0.997710     0.904427    0.047178
54   absent  140       4     15  0.004711     0.779213    0.072759
55   absent   72       5     15  0.993830     0.208729    0.072759
56   absent    2       3     13  0.997710     0.829827    0.090356
57  present  120       5      8  0.005786     0.208729    0.939803
58   absent   51       7      9  0.994754     0.072175    0.927241
59   absent  102       3     13  0.006362     0.829827    0.090356
60  present  130       4      1  0.005290     0.779213    0.996493
61  present  114       7      8  0.006029     0.072175    0.939803
62   absent   81       4      1  0.993617     0.779213    0.996493
63   absent  118       3     16  0.005872     0.829827    0.060197
64   absent  118       4     16  0.005872     0.779213    0.060197
65   absent   17       4     10  0.996844     0.779213    0.916693
66   absent  195       2     17  0.001558     0.904427    0.047178
67   absent  159       4     13  0.003517     0.779213    0.090356
68   absent   18       4     11  0.996783     0.779213    0.909644
69   absent   15       5     16  0.996966     0.208729    0.060197
70   absent  158       5     14  0.003580     0.208729    0.083307
71   absent  127       4     12  0.005449     0.779213    0.092836
72   absent   87       4     16  0.993547     0.779213    0.060197
73   absent  206       4     10  0.001135     0.779213    0.916693
74   absent   11       3     15  0.997205     0.829827    0.072759
75   absent  178       4     15  0.002387     0.779213    0.072759
76  present  157       3     13  0.003643     0.829827    0.090356
77   absent   26       7     13  0.996282     0.072175    0.090356
78   absent  120       2     13  0.005786     0.904427    0.090356
79  present   42       7      6  0.995277     0.072175    0.964974
80   absent   36       4     13  0.995648     0.779213    0.090356

, и у меня есть следующие виды списка:

A=0,S=0,N=0
X3=[A,S]
X7=[N,A,A,A,S,S]
X5=[S,N,A,A,S,A,S]
X4=[N,S,N,A,A,S,A,S]
X9=[N,S,N,A,A,S,A,S]
X10=[A,A,A,S,S]
list=[ X7,  X7,  X5,  X7,  X7,  X7,  X7,  X5,  X7,  X7,  X5,  X5,  X3,  X7,  X7,  X7, X10, X10,  X7,  X7, X10,  X7,  X7, X10,  X7, X10,  X9,  X7,  X7,  X4,X7]

Теперь, что я хочу сделать, эточтобы пройти через df, поместите значения столбца 'prob_Age' 'prob_Number' 'prob_Start' каждой записи соответственно в 'list'

Я пробовал этот код:

A=0,S=0,N=0
X3=[N,A,S]
X7=[A,S]
X5=[A,S]
X4=[N,A,S]
X9=[A,A,S]
X10=[A,A,S]
list=[ X7,  X7,  X5,  X7,  X7,  X7,  X7,  X5,  X7,  X7,  X5,  X5,  X3,  X7,  X7,  X7, X10, X10,  X7,  X7, X10,  X7,  X7, X10,  X7, X10,  X9,  X7,  X7,  X4,X7]
list1=[]
for i in df.iterrows():
    A=df['prob_Age']
    S=df['prob_Number']
    N=df['prob_Start']
    print(list)

EXPECTEDВЫХОД

list=[ [0.993964,0.916693],  [0.997321,0.047178],  [0.004772,0.964974],  [0.997710,0.047178],  [0.004711,0.072759], 
      [0.993830,0.072759],  [0.997710,0.090356],  [0.005786,0.939803],  [0.994754,0.927241],  [0.006362,0.090356],  
      [0.005290,0.996493],  [0.006029,0.939803],  [0.993617,0.779213,0.996493],  [0.005872,0.060197],  [0.005872,0.060197],
      [0.996844,0.916693], [0.001558,0.001558,0.047178], [0.003517,0.090356],  [ 0.996783,0.909644],  [0.996966,0.060197], 
      [0.003580,0.003580,0.083307],  [0.005449,0.092836],  [0.993547,0.060197], [0.001135,0.001135,0.916693], [0.997205,0.072759], 
      [ 0.002387,0.002387,0.072759],  [0.003643,0.003643 ,0.090356],  [0.996282 ,0.090356],  [0.005786,0.090356],  [0.995277,0.072175,0.964974],[0.995648,0.090356]]

Я получил ответ, спасибо всем:

list=[]
c=0
for _, x in df.iterrows():
    A, S, N = x[['prob_Age', 'prob_Start', 'prob_Number']].values
    X3=[N,A,S]
    X7=[A,S]
    X5=[A,S]
    X4=[N,A,S]
    X9=[A,A,S]
    X10=[A,A,S]
    l=[ X7,  X7,  X5,  X7,  X7,  X7,  X7,  X5,  X7,  X7,  X5,  X5,  X3,  X7,  X7,  X7, X10, X10,  X7,  X7, X10,  X7,  X7, X10,  X7, X10,  X9,  X7,  X7,  X4, X7]
    list.append(l[c])
    c=c+1
print(list)

Ответы [ 3 ]

1 голос
/ 01 мая 2019

Во-первых, list - это встроенная функция в python, поэтому вы не должны использовать ее в качестве имени переменной. Во-вторых, хотя вы меняете переменные A, S, N на каждой итерации (ну, на самом деле, они не меняются, поскольку на каждой итерации вы присваиваете им одинаковые значения), вы не меняете значения ни одного из списков. Таким образом, чтобы получить желаемый результат для каждой итерации, вы должны сделать что-то вроде этого:

for _, x in df.iterrows():
    A, S, N = x[['prob_Age', 'prob_Number', 'prob_Start']].values
    X3=[N,A,S]
    X7=[A,S]
    X5=[A,S]
    X4=[N,A,S]
    X9=[A,A,S]
    X10=[A,A,S]
    l=[ X7,  X7,  X5,  X7,  X7,  X7,  X7,  X5,  X7,  X7,  X5,  X5,  X3,  X7,  X7,  X7, X10, X10,  X7,  X7, X10,  X7,  X7, X10,  X7, X10,  X9,  X7,  X7,  X4,X7]
    print(l)

Теперь, как говорится, в зависимости от вашей конечной цели, я уверен, что есть лучшее решение.

EDIT Это может быть немного лучше:

inds = [
    'X7', 'X7', 'X5', 'X7', 'X7', 'X7', 'X7', 'X5', 'X7', 'X7',
    'X5', 'X5', 'X3', 'X7', 'X7', 'X7', 'X10', 'X10', 'X7', 'X7',
    'X10', 'X7', 'X7', 'X10', 'X7', 'X10', 'X9', 'X7', 'X7', 'X4', 'X7'
]
def fill_in(idx, row):
    A, S, N = row[['prob_Age', 'prob_Number', 'prob_Start']].values
    d = {
        'X3': [N,A,S],
        'X7': [A,S],
        'X5': [A,S],
        'X4': [N,A,S],
        'X9': [A,A,S],
        'X10': [A,A,S]
    }
    return d[inds[idx]]

l = [fill_in(i, x) for i, x in df.iterrows()]
0 голосов
/ 01 мая 2019

Вопрос не совсем понятен, но если я правильно понял, и вам нужен список каждого списка (val 1, val 2, val 3) в строке, это будет работать.Я смоделировал аналогичный df ('data' в примере: https://imgur.com/a/MhTuUbh), чтобы проверить его.


list_to_fill = []

length = len(data)

row = 0
col = 4
cell = data.iat[row, col]

for r in range (length):

    temp_row_list = []
    for i in range(3):
        cell = data.iat[row, col]
        temp_row_list.append(cell)
        col = col + 1    
    list_to_fill.append(temp_row_list)

    col = 4
    row = row + 1

print ('final list =', list_to_fill)

, давая вам:

final list = [[4, 5, 1], [7, 3, 2], [9, 0, 8]]

0 голосов
/ 01 мая 2019

Вероятно, это не лучший способ сделать это.

#A=0,S=0,N=0 This is not required
#X3=[N,A,S]
#X7=[A,S]
#X5=[A,S]
#X4=[N,A,S]
#X9=[A,A,S]
#X10=[A,A,S]
l =[ 'X7',  'X7',  'X5',  'X7',  'X7',  'X7',  'X7',  'X5'........]
# as pointed out above list should not be used as a variable
# change l values into string, there are easy ways to do this.
idx = 0

for i,row in df.iterrows():    # have to add the row because there are two values index and row to unpack
   A=row['prob_Age']
   S=row['prob_Number']
   N=row['prob_Start']
   X3=[N,A,S]
   X7=[A,S]
   X5=[A,S]
   X4=[N,A,S]
   if str(list[idx]) == 'X7':   # the str part is not required if the l is changed.
        list[idx] = X7
   elif str(list[idx]) == 'X3':
        list[idx] = X3
   elif str(list[idx]) == 'X5':
        list[idx] = X5
   elif str(list[idx]) == 'X4':
        list[idx] = X4
    ### Put more conditions
   idx +=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...