Python Pandas: повторное использование значения строки для другой строки - поиск по строке - PullRequest
1 голос
/ 14 февраля 2020

У меня есть следующий фрейм данных

df1 =  DataFrame([['OBJ1', 10, 'BX', 'pool1', 'OBJ2'],['OBJ2', 0, '', '', 'OBJ1'],['OBJ3', 10, 'BY', 'pool2', 'OBJ4'],['OBJ4', 0, '', '', 'OBJ3'],['OBJ5', 10, 'BZ', 'pool3', '']], columns=['OBJ', 'value', 'conf', 'Res', 'Key'])

enter image description here

Я пытаюсь сделать следующее:

  • проверить, когда значение равно 0
  • Conf и Res принимают значение строки с ключом, соответствующим OBJ
  • , например, значение OBJ2 равно 0, а ключ равен OBJ 2, затем conf должен стать BX, а Res - pool1

Я пробовал несколько решений, используя поиск или другие сообщения, но ничего не помогло.

df1.loc[df1['value']==0, 'conf'] = df1.loc[df1['OBJ']==df1['Key']]['conf'] 

не удалось, так как я понял, что это выглядит для строк с OBJ = ключ

1 Ответ

1 голос
/ 14 февраля 2020

Используйте DataFrame.merge с параметрами left_on и right_on и столбцом index, созданным DataFrame.reset_index для нового DataFrame, затем преобразуйте столбец index на index на DataFrame.set_index и в последний раз установите новые значения на DataFrame.loc:

m = df1['value'].eq(0)
cols = ['conf','Res']
df = (df1.reset_index().loc[m, ['index','OBJ']]
          .merge(df1, left_on='OBJ', right_on='Key')
          .set_index('index')[cols])
print (df)
      conf    Res
index            
1       BX  pool1
3       BY  pool2

df1.loc[m, cols] = df
print (df1)
    OBJ  value conf    Res   Key
0  OBJ1     10   BX  pool1  OBJ2
1  OBJ2      0   BX  pool1  OBJ1
2  OBJ3     10   BY  pool2  OBJ4
3  OBJ4      0   BY  pool2  OBJ3
4  OBJ5     10   BZ  pool3    
...