Присвоение значения в столбце на основе значений многих других столбцов в кадре данных - PullRequest
0 голосов
/ 11 марта 2020

У меня есть такой фрейм данных, который содержит 5 столбцов, я хочу обновить один столбец на основе других 4 столбцов, фрейм данных выглядит так

from       via      to       x       y 
 3          2       13      in       out
 3          2       15      in       out
 3          2       21      in       out
13          2       3             
15          2       13     
21          2       13
1          12        2 
1          12        2
1          12        22
2          12        1      in
2          12        22     in      out
22         12        2    

идея состоит в том, чтобы заполнить столбец X в зависимости для значений в других четырех столбцах последовательность должна выглядеть следующим образом: я должен проверить, есть ли значения x и y, если да, то мне нужно использовать соответствующие значения (from, via) и сравнить его во всех строках с значения (до, через), если они одинаковы, поэтому я должен присвоить значение Y, которое соответствует (из, через) для столбца X в строке, которая имеет равные значения (для, через), так в этом примере я вижу, что (из = 3, через = 2 есть значения x и y, поэтому я возьму значение (из = 3, через = 2) и сравню его со значениями (до, через) во всех строках я могу присвоить значение (y = out) в строках, которое имеет (to = 3, via = 10)

конечный результат должен быть таким:

from       via      to       x       y 
 3          2       13      in       out
 3          2       15      in       out
 3          2       21      in      
13          2       3       out      
15          2       13      out
21          2       13
1          12        2      out 
1          12        2      out
1          12        22     out
2          12        1      in
2          12        22     in      out
22         12        2      out

как я могу сделать это в pandas данных?

1 Ответ

0 голосов
/ 11 марта 2020

Я не могу найти точно такой же результат, но я использовал описанный al go:

# identify the lines where a change will occur and store the index and the new  value
tmp = df.assign(origix=df.index).merge(df[~df['x'].isna() & ~df['y'].isna()], 
                                       left_on = ['from', 'via'], right_on = ['to', 'via'],
                                       suffixes=('_x', '')).set_index('origix')

# apply changes in dataframe:
df.loc[tmp.index, 'x'] = tmp['y']

, это дает:

...