2013-09-10 6 views
5

Учитывая эти кадры два данных:Как обновить существующий фрейм данных в пандах?

>>> df1 = pd.DataFrame({'c1':['a','a','b','b'], 'c2':['x','y','x','y'], 'val':0}) 
>>> df1 
    c1 c2 val 
0 a x 0 
1 a y 0 
2 b x 0 
3 b y 0 

>>> df2 = pd.DataFrame({'c1':['a','a','b'], 'c2':['x','y','y'], 'val':[12,31,14]}) 
>>> df2 
    c1 c2 val 
0 a x 12 
1 a y 31 
2 b y 14 

Существует ли функция, которая принимает элементы val из df2 и помещает их в соответствующих индексов df1, в результате чего:

>>> df1_updated 
    c1 c2 val 
0 a x 12 
1 a y 31 
2 b x 0 
3 b y 14 

ответ

8

Да, принять посмотрите на combine_first или update. Например:

>>> df1['val'] = df2['val'].combine_first(df1['val']) 
>>> df1 
Out[26]: 
    c1 c2 val 
0 a x 12 
1 a y 31 
2 b x 14 
3 b y 0 

EDIT: объединить в соответствии с c1 и c2, игнорируя текущий индекс:

>>> df1['val'] = df2.set_index(['c1','c2'])['val'].combine_first(df1.set_index(['c1','c2'])['val']).values 
>> df1 
Out[25]: 
    c1 c2 val 
0 a x 12 
1 a y 31 
2 b x 0 
3 b y 14 
+0

Это не работает, потому что он не принимает во внимание индексы df1. Значение 14 должно быть в строке b y – HappyPy

+0

@HappyPy, обновлено. – elyase

+0

Отлично, большое спасибо! И спасибо также за то, что нашли время, чтобы решить эту проблему :) – HappyPy

Смежные вопросы