Отображение значений из маленького информационного кадра в больший информационный - PullRequest
0 голосов
/ 01 июля 2018

У меня есть два кадра данных. DF1:

Page      LineNum      Value
1          1            0.5
1          2            0.6
1          3            0.7
2          1            0.9
2          2            0.4

DF2: Исходный кадр данных состоит из первых трех столбцов, и мне нужно сгенерировать четвертый столбец с именем New_Value.

Page      LineNum      Word    New_Value
1          1            g1      0.5
1          1            g2      0.5
1          1            g3      0.5
1          1            g4      0.5
1          2            g5      0.6
1          2            g6      0.6
1          3            g7      0.7
1          3            g8      0.7
...

Мне нужно сгенерировать четвертый столбец DF2, который фактически отображается из уникальных значений DF1 «Page» и «LineNum». В DF2 значения просто повторяются в соответствии с уникальными значениями в DF1 относительно «Page» и «LineNum».

В настоящее время я делаю это с помощью цикла for:

    for index, row in DF1.iterrows():
        DF2.ix[((DF2['Page'] == row['Page']) & (DF2['LineNum'] == row['LineNum'])),['New_Value']] = row['Value']

Это работает абсолютно нормально, но оба кадра данных очень большие. Поэтому мне нужна какая-то оптимизированная функция, возможно, с использованием groupby и lambda, но я не смог придумать точную функцию.

Пожалуйста, предложите оптимизированную версию без цикла For. пожалуйста, прокомментируйте, если есть что-то еще, что я должен объяснить по этому поводу. Я использую Python3 и панд.

1 Ответ

0 голосов
/ 01 июля 2018

Я думаю, что нужно merge с левым соединением:

df = (df2.merge(df1.rename(columns={'Value':'New_Value'}),
                on=['Page','LineNum'], how='left'))
print (df)

   Page  LineNum Word  New_Value
0     1        1   g1        0.5
1     1        1   g2        0.5
2     1        1   g3        0.5
3     1        1   g4        0.5
4     1        2   g5        0.6
5     1        2   g6        0.6
6     1        3   g7        0.7
7     1        3   g8        0.7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...