Обновление столбца в кадре данных со значениями из того же столбца другого кадра данных - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть большой массив данных, в котором есть столбец, который я хотел бы обновить новыми значениями из меньшего кадра данных, только если значения строк для другого столбца совпадают.Левое объединение имеет правильные строки, но два столбца значений, которые я хочу «обновить» (левый и правый).Я попытался выполнить левое слияние с каплями, но, конечно, это уничтожает значения в столбце, который я пытаюсь обновить, если соответствующий столбец не совпадает.Я также пробовал варианты этого:

tips.loc[tips['tip'] < 2, 'tip'] = 2

, но я получаю ошибку о том, что длины серий должны совпадать, потому что таблица, из которой я обновляюсь, меньше.Я также посмотрел на DataFrame.combine_first (), но документы не показывают, что он принимает какие-либо параметры и не выдает того, что я ищу.

Вот пример:

df = pd.DataFrame({'CAT': ['A', 'B', 'C', 'D', 'E'], 'Value': [12, 34, np.NaN, 43, 21]})
  CAT  Value
0   A     12
1   B     34
2   C    NaN
3   D     43
4   E     21

df2 = pd.DataFrame({'CAT': ['C', 'F', 'G'], 'Value': [22, 99, 44]})
  CAT  Value
0   C     22
1   F     99
2   G     44

результат должен выглядеть следующим образом:

 CAT  Value
0   A     12
1   B     34
2   C     22
3   D     43
4   E     21

Хотя в левом кадре в этом примере обновляется NaN, яне смотря исключительно на этот случай.Я хочу перезаписать любое значение.Любая помощь?Thx.

1 Ответ

0 голосов
/ 30 сентября 2018

Похоже, вы хотите заменить Value из df на Value в df2, если значение существует.Т.е., предполагая, что у вас есть CAT F, который имел соответствующее значение 36 в df, вы хотели бы заменить его на 99 (из df2).

Используя merge:

df= df.merge(df2, on = 'CAT', how = 'left')
df['Value'] = df[['Value_x', 'Value_y']].apply(lambda x: np.where(df['Value_y'].isna(), df['Value_x'], df['Value_y'])).drop(columns = ['Value_y'])
df.drop(columns = ['Value_x', 'Value_y'])

Вывод:

  CAT  Value
0   A   12.0
1   B   34.0
2   C   22.0
3   D   43.0
4   E   21.0
5   F   99.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...