Изменение значений из фрагмента DataFrame pandas с использованием разных DataFrames - PullRequest
0 голосов
/ 07 декабря 2018

Я хочу присвоить значения столбцу DataFrame pandas, используя фрагмент из другого DataFrame с индексами commom.Более или менее похоже на создание нового столбца в df1, заполняющего значения из другого столбца DataFrame (в следующем примере, df2 ['D']), которые имеют такой же индекс.

Пример: у меня есть два DataFrames, df1 и df2.

df1
          A         B
g                    
a  0.286074  0.148268
b  0.271671  0.356847
c  0.155908  0.951075

df2
          C         D
g                    
c  0.218612  0.296498
d  0.382499  0.900638

Теперь я хочу добавить новый столбец в df1 со всеми значениями из df2 ['D'], которые имеют одинаковыеиндекс (строка) в df1.Я знаю, что могу сделать что-то вроде этого:

for g in df2.index:
    if g in df1.index.values.tolist():
        df1.loc[g, 'D'] = df2.loc[g, 'D']

df1
          A         B         D
g                              
a  0.286074  0.148268       NaN
b  0.271671  0.356847       NaN
c  0.155908  0.951075  0.296498

и работает отлично!Но я думаю, что решение настолько уродливо и совсем не использует возможности DataFrame панд.

Я пытался сделать что-то вроде следующего, но не сработало совсем:

df1.reindex(df1.index.intersection(df2.index))['D'] = df2['D']

df1
          A         B
g                    
a  0.286074  0.148268
b  0.271671  0.356847
c  0.155908  0.951075

Я пытался сделать кучу других вещей, используя loc или запросы, но ни один из них не работал.

Этот пример был создан на основе того, что мне нужно сделать с таблицами, содержащими большие объемные данные, этоВот почему я хочу оптимизировать результат.

Заранее спасибо!

1 Ответ

0 голосов
/ 07 декабря 2018

Просто назначьте его

df1['D']=df2.D
df1
          A         B         D
a  0.286074  0.148268       NaN
b  0.271671  0.356847       NaN
c  0.155908  0.951075  0.296498
...