Заменить значение одного столбца на основе условия - PullRequest
1 голос
/ 20 мая 2019

У меня есть два фрейма данных с именами df и df_reference, которые содержат следующую информацию:

df                  df_reference
col1  col2          col1 col2
 A     10            A    15
 B     25            B    33
 C     30            C    20
 A     12

Я хочу сравнить оба фрейма данных на основе col1.Я хочу заменить значение df.col2 на df_reference.col2, если значение в df_reference превышает значение df.col2.

Ожидаемый результат:

df                  
col1  col2         
 A     15            
 B     33           
 C     30           
 A     15

Я пробовал:

dict1 = {'a':'15'}
df.loc[df['col1'].isin(dict1.keys()), 'col2'] = sams['col1'].map(dict1)

Ответы [ 2 ]

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

Используйте Series.map от Series, созданного DataFrame.set_index, и значения NaN, если некоторые значения не совпадают, заменяются на Series.fillna:

s = df['col1'].map(df_reference.set_index('col1')['col2']).fillna(df['col2'])

df.loc[s > df['col2'], 'col2'] =  s
print (df)
  col1  col2
0    A    15
1    B    33
2    C    30
3    A    15
0 голосов
/ 20 мая 2019

Я могу предложить вам сначала выполнить слияние на основе 'col1', а затем применить функцию, которая генерирует новый столбец с большим значением двух 'col2'.Тогда просто опустите бесполезный столбец!

def greaterValue(row) :
   if (row['col2_x']>row['col2_y']) :
      return row['col2_x']
   else :
      return row['col2_y']

df = df.merge(df_reference, left_on='col1', right_on='col1') df['col2'] = df.apply(greaterValue, axis=1) df = df.loc[:,['col1','col2']]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...