#python #pandas
#python #pandas
Вопрос:
как мне «обновить» a12 на основе значений другого фрейма данных, который использует общий ключ? В приведенном ниже примере общим ключом является столбец a.
a12 =
a b c
0 1 1
1 na na
try10 =
a b c
1 1 1
когда я использую слияние, я получаю что-то вроде этого.
pd.merge(a12, try10) =
a b c b_y c_y
0 1 1 na na
1 na na 1 1
Я решил сделать это вручную, но я думаю, что должен быть более питонический способ, чем приведенный ниже. Я был бы признателен за вашу помощь.
for i, val in a12.iterrows():
for x, xval in try10.iterrows():
if xval['Firm1'] == val['Firm']:
try10.ix[x]['AMranking'] = val['AMranking']
try10.ix[x]['numlawyers'] = val['numlawyers']
try10.ix[x]['grossprofits'] = val['grossprofits']
del try12['firm']
Ответ №1:
Существует combine_first
метод, который вы можете использовать. Смотрите здесь. Вам нужно будет установить желаемый ключ в обоих фреймах данных в качестве индекса.
In [128]: a12.set_index ('a').combine_first(try10.set_index('a'))
Out[128]:
b c
a
0 1 1
1 1 1
Ответ №2:
Вы можете просто применить dropna
к a12
перед merge
:
In [53]:
a12 = pd.DataFrame({'a':[0, 1], 'b':[1, np.nan], 'c':[1, np.nan]})
try10= pd.DataFrame({'a':[1], 'b':[1], 'c':[1]})
In [54]:
print pd.merge(a12, try10, how='outer', left_on='a', right_on='a')
a b_x c_x b_y c_y
0 0 1 1 NaN NaN
1 1 NaN NaN 1 1
In [55]:
print pd.merge(a12.dropna(0), try10, how='outer')
a b c
0 0 1 1
1 1 1 1
Если a
— это индекс:
In [57]:
print pd.merge(a12.dropna(0).reset_index(), try10.reset_index(), how='outer').set_index('a')
b c
a
0 1 1
1 1 1