заменить значения одного кадра данных на значения другого кадра на основе условия - PullRequest
0 голосов
/ 24 января 2020

У меня есть df, который выглядит как

floor id p1 p2 p3
L1     1  5  6  7
L1     2  5  8  3
L2     1  4  2  1
L2     2  4  5  4

и df2

floor id p1 p2 p4
L1     1  6  6  5
L1     2  9  8  5 
L2     1  5  5  5
L2     2  4  5  5

Как заменить значения p1 и p2 в моем df для определенного этажа и id на Значения соответствующих значений из df2?

Ответы [ 2 ]

1 голос
/ 24 января 2020

Мы также можем использовать DataFrame.merge

df1 = (df1[df1.columns.difference(['p1','p2'])].merge(df2,
                                                      on =['floor','id'],
                                                      how ='left')
                                               .fillna(df1)[df1.columns])
print(df1)
  floor  id  p1  p2  p3
0    L1   1   6   6   7
1    L1   2   9   8   3
2    L2   1   5   5   1
3    L2   2   4   5   4
0 голосов
/ 24 января 2020

Слияние может быть использовано для этой конкретной проблемы:

# left join
df = (df.merge(df2, left_on=['floor', 'id'], how='left', right_on=['floor', 'id'])
# fill missing values with corresponding original df values
df['p1_y'] = df['p1_y'].fillna(df['p1_x']).astype(int)
df['p2_y'] = df['p2_y'].fillna(df['p2_x']).astype(int)

# drop unnecessary columns
df.drop(['p1_x', 'p2_x', 'p4'], axis=1, inplace=True)
df.rename(columns={'p1_y': 'p1', 'p2_y': 'p2'}, inplace=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...